[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
- Subject: Erro na implementação de monitores no Tanembaum
- From: "Edson Susumu Asaga" <susumu@computer.org>
- Date: Tue, 2 May 2000 12:34:17 -0300
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.