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