-
-
-
CENAPAD-MGCO
A seguir: 5a Questão Acima: Cristiano Ligieri Pereira Anterior: 3a. Questao
Bed bbed, /* barber bed */
cbed; /* customer bed */
int nc = 0, /* number of customers waiting */
busy = 0, /* if the barber is busy */
waiting = 0; /* number of customers waiting (auxiliar) */
Key mutex;
void barber() {
while (TRUE) {
lock(mutex);
busy = 0;
if (nc == 0)
wait(bbed, mutex);
nc--;
if (waiting > 0) {
waiting--;
wakeup(cbed, mutex);
}
busy = 1;
unlock(mutex);
cut_hair();
}
}
void customer() {
lock(mutex);
if (nc < NUMBER_OF_CHAIRS) {
nc++;
if (nc == 1 && busy == 0)
wakeup(bbed, mutex);
if (nc > 0 && busy == 1) {
waiting++;
wait(cbed, mutex);
}
unlock(mutex);
get_hair_cut();
}
else {
unlock(mutex);
}
}