- - - - CENAPAD-MGCO

A seguir: Cristiano Ligieri Pereira Acima: Gabarito Anterior: 4a Questão


5a Questão

Uma barreira é uma construção para a sincronização de processos que é útil para assegurar que todos os processos envolvidos em uma tarefa atingiram um ponto determinado em suas computações. A barreira é inicializada com um valor inteiro. Se um processo executa bar.barrier(int b), ele é bloqueado na barreira bar até que o número de processos igualmente bloqueados na barreira atinja b, quando a progressão de todos os processos em espera na barreira é liberada. Programe uma classe Barrier que ofereça este tipo de sincronização.

class Barrier {
  int n = 0;
  Bed bed;
  Key mutex;

  void barrier(int b) {
    n++;
    if(n >= b) {
      wakeup(bed, mutex);
      n = 0;
    } else {
      wait(bed, mutex);
    }
  }
}



Osvaldo Carvalho - Postscript - Comentários?