-
-
-
CENAPAD-MGCO
A seguir: 5a Questão Acima: Gabarito Anterior: 3a Questão
/* cliente */
loop
...
if (barbershop.enter()) {
/* conseguiu entrar, tendo talvez esperado em uma cadeira */
/* faz a barba */
barbershop.leave();
} else {
/* nao conseguiu; as cadeiras estavam ocupadas */
}
...
end
class Barbershop {
int nchairs = 0;
boolean enter() {
lock(mutex);
if (nchairs >= 4) {
return false;
}
nchairs++
while (barberBusy) {
wait(bed, mutex);
}
nchairs--;
return true;
unlock(mutex);
}
void leave() {
lock(mutex);
barberBusy = false;
wakeup(bed,mutex);
unlock(mutex);
}
}