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:

The problem described is a classic example of a synchronization issue, which can be addressed using semaphores. Here is a pseudo-code to coordinate the barber and the customers in a barbershop setting:

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.
← Data types in programming Troubleshooting tips for beginners →