-
-
-
CENAPAD-MGCO
A seguir: Questao 5 Acima: Sahira Vieira de Miranda Anterior: Questao 3
# define n 5; /* Numero de cadeiras simples disponiveis */
Key mutex;
Int waiting = 0; /* Numero de clientes esperando */
boolean busy = false; /* Indica se o barbeiro esta ocupado */
bed c\c{c} cb; /* camas dos clientes e do barbeiro */
TicketQueue q;
void Barbeiro( ){
while (true)
lock(mutex);
if (waiting == 0) wait (cb, mutex);
waiting--;
busy = true;
unlock(mutex);
/* corta o cabelo */
lock(mutex);
busy = false;
wakeup(c\c{c} mutex);
wait(cb, mutex);
}
}
void Cliente(){
lock(mutex);
if (waiting < n){
int myTicket = q.getTicket();
waiting++;
while (busy || !q.isTheBest(myTicket))
wait(c\c{c} mutex);
q.ok(myTicket);
wakeup(cb, mutex);
unlock(mutex);
}
else
unlock(mutex);
}
Nesta implementacao utilizou-se os procedimentos da classe TicketQueue dada em sala de aula.