- - - - CENAPAD-MGCO

contents index A seguir: Jantar dos Filósofos Acima: Semáforos Anterior: Exclusão Mútua com Semáforos


Produtor/Consumidor com semáforos

O semáforo cheios conta as posições ocupadas no buffer;

O semáforo vazios conta as posições vazias.

class Buffer{

int p=0, c=0;
Semaphore cheios = new Semaphore(0);
Semaphore vazios = new Semaphore(MAX);

public void put(char x) {
  vazios.P();
  buf[p] = x;
  p = (p + 1) % MAX;
  cheios.V();
}

public char get() {
  cheios.P();
  char x = Buf[c];
  c := (c + 1) MOD (MAX + 1);
  vazios.V();
  return x;
}}

O paralelismo é maior, pois partes distintas do buffer são acessadas simultaneamente;

A complexidade da solução é maior.



Osvaldo Carvalho - Postscript - Comentários?