2 - Practical synchronization
Semaphore mutex(1);
Semaphore coordinatorNeeded(0);
Semaphore capacity(0);
int waitingWorkers = 0;
int capacityCount = 0
workerEntry(){
mu.wait()
if capacityCount == 0:
coordinator.signal()
mu.signal()
capacity.wait()
mu.wait()
capacityCount--
mu.signal()
}
void coordinatorEntry(){
coordinator.wait()
mu.wait()
capacityCount += 3
capacity.signal(3)
mu.signal()
}