- - - - CENAPAD-MGCO

A seguir: TicketQueue Acima: Questão 5 Anterior: Questão 5


Barrier

/* variaveis globais */
TicketQueue waiting;
key mutex;
bed b;
int n = 0, nL = 0;
/* n: numero de provessos que entratam na barreira */
/* nL: numero de processos que foram liberados */

void barrier (int num) {
     /* para uma mesma barreira assume-se a hipotese que o valor num */
     /* sera o mesmo em todas as chamadas de barrier */
     lock(mutex);
          int myTicket = waiting.getTicket();
          n++;
          if (n >= num) {
               wakeup(b, mutex);
          }
          while ((n < num) || (!waiting.isTheBest(myTicket))) {
               wait(b, mutex);
          }
          nL++:
          if (nL == num) {
               n -= num;
               nL = 0;
          }
          waiting.ok(myTicket);
          wakeup(b, mutex);
     unlock(mutex);
}



Osvaldo Carvalho - Postscript - Comentários?