Shared data: var customers: semaphore; // # of customers waiting for service var barbers: semaphore; // # of barbers waiting for customers var mutex: semaphore; // for mutual exclusion var waiting: int; // customers waiting (not being cut) var chairs: int; // # of chairs for waiting customers:= 0; barbers:= 0; mutex:= 1; waiting:= 0; chairs:= 5; Barber: repeat waiting:= waiting - 1; // decrement count of waiting customers cut_hair(); // cut the customer's hair until false; Customer: if (waiting < chairs) then begin waiting:= waiting + 1; get_haircut(); // get a haircut end else