[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Erro na implementação de monitores no Tanembaum



A implementação de monitores da página 53 está errada,
na rotina leave_with_signal, o sinal deve ser perdido
se não houver ninguém esperando, assim é necessário existir
uma variável a mais para contar o número de processos
esperando o sinal, segue a implementação corrigida:

void leave_with_signal(condition *c)
{
  if (c.count > 0)
    up(c.semaphore);
  else
    up(mutex);
}

void wait(condition *c)
{
  c.count++;
  up(mutex);
  down(c.semaphore);
}

A implementação acima não suporta a operação broadcast que consta
nas normas Posix. Para ver uma implementação mais completa que
suporta a operação broadcast veja Silberchatz, que introduz mais
um semáforo e mais um contador na implementação.