-
-
-
CENAPAD-MGCO
A seguir: Jantar dos Filósofos
Acima: Semáforos
Anterior: Exclusão Mútua 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.