- - - - CENAPAD-MGCO

A seguir: Questao 5 Acima: Sahira Vieira de Miranda Anterior: Questao 3


Questao 4

# 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.



Osvaldo Carvalho - Postscript - Comentários?