Symulacja Salonu Fryzjerskiego to projekt demonstracyjny ilustrujący zasady synchronizacji wątków w języku C, z wykorzystaniem semaforów i mutexów. Program emuluje działanie salonu fryzjerskiego z jednym fryzjerem i ograniczoną liczbą miejsc w poczekalni.
Projekt symuluje:
- Gabinet z jednym fotelem: Gdzie jednocześnie może być obsługiwany tylko jeden klient.
- Poczekalnię z ograniczoną liczbą krzeseł: Klienci czekają na swoją kolej na wolnych miejscach. Gdy nie ma wolnych miejsc, odchodzą.
- Fryzjera: Fryzjer strzyże klientów i w przypadku braku klientów zasypia.
Przeznaczenie: Mutex zapewnia wzajemne wykluczanie podczas modyfikowania wspólnych zasobów takich jak
waiting_queue (kolejka czekających klientów)
waiting_count (liczba oczekujących klientów)
rejected_count (liczba rezygnacji).
Sposób wykorzystania: Fryzjer i klienci używają mutexa, aby zapewnić, że tylko jeden wątek na raz może modyfikować wspólne zasoby. Mutex jest blokowany przy wchodzeniu do sekcji krytycznej (pthread_mutex_lock) i odblokowywany po zakończeniu operacji (pthread_mutex_unlock).
Przeznaczenie: Semafor barber_ready sygnalizuje, że fryzjer jest gotowy do pracy lub czeka na klienta. Pozwala on fryzjerowi "spać", gdy nie ma klientów, i być obudzonym przez przychodzącego klienta.
Sposób wykorzystania: Klient wchodzący do poczekalni sprawdza, czy fryzjer śpi. Jeśli tak, klient zwiększa semafor (sem_post), budząc fryzjera. Fryzjer czeka (sem_wait), aż klient go obudzi.
Przeznaczenie: Semafor customer_ready sygnalizuje, że klient jest gotowy do wejścia na fotel fryzjerski.
Sposób wykorzystania: Gdy fryzjer wybiera klienta do strzyżenia, zwiększa semafor (sem_post), sygnalizując klientowi, że może usiąść na fotelu. Klient czeka (sem_wait), aż fryzjer będzie gotowy go przyjąć