In un barber shop lavora un solo barbiere, vi è una sola sedia adibita al taglio, e vi sono N sedie per i clienti in attesa. Assumiamo $n=20$.

Comportamento del barbiere:

Comportamento del cliente:

Programmare il barbiere ed il singolo cliente:

semaphore clienti_nel_negozio = 0, barbiere_libero = 0, mutex = 1;
int clienti_in_attesa = 0; //variabile condivisa
final int sedie = 20;

void barbiere(){
	while(true){
		wait(clienti_nel_negozio);
		wait(mutex);
			clienti_in_attesa--;
			signal(barbiere_libero);
		signal(mutex);
		taglia_capelli();
	}
}

void cliente(){
	wait(mutex);
	if(clienti_in_attesa < sedie){
		clienti_in_attesa++;
		signal(clienti_nel_negozio);
		signal(mutex);
		wait(barbiere_libero);
		ricevi_taglio();
	}else{
		signal(mutex);
	}
}