Barbershop Scenario: Coordinating the Barber and Customers
How can you coordinate the barber and customers in a barbershop scenario using semaphores?
The provided pseudo-code uses semaphores to coordinate the barber and customers in a barbershop scenario, ensuring proper synchronization of customer arrival and service.
Pseudo-code for Barber and Customer Coordination:
Initialize semaphore customers to 0.
Initialize semaphore barber to 0.
Initialize semaphore mutex for mutual exclusion to 1.
Initialize n chairs available.
Barber process:
While true:
Wait (customers) // Sleep until a customer arrives
Wait (mutex) // Accessing the waiting room chairs count
n chairs++ // One waiting chair gets free
Signal (barber) // Barber is ready to cut hair
Signal (mutex) // Release access to waiting room chairs count
// Cut hair here
Customer process:
While true:
Wait (mutex) // Accessing the waiting room chairs count
If n chairs > 0:
n chairs-- // Customer sits in a chair
Signal (customers) // Notify the barber
Signal (mutex) // Release access to waiting room chairs count
Wait (barber) // Wait for the barber to be ready
// Customer is getting hair cut
Else:
Signal (mutex) // Release access to waiting room chairs count
// Customer leaves as no chairs are free
This pseudo-code ensures that the customer and barber processes are synchronized such that no more than one customer occupies a chair, the barber sleeps when no customers are present, and customers either wait in a free chair or leave if none are available.