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()
}