[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Segunda lista de exercícios
- Subject: Segunda lista de exercícios
- From: Francisco Reverbel <reverbel@xxxxxxxxxx>
- Date: Sun, 11 Jun 2006 18:25:45 -0300
- Exercícios do capítulo 5 do livro do Andrews: 5.1, 5.4, 5.7, 5.9 e
5.17.
- Resolver o problema do banheiro unisex usando um monitor. O monitor
deve oferecer procedimentos homemQuerEntrar(), homemSai(),
mulherQuerEntrar() e mulherSai(). Homens e mulheres são processos
que chamam esses procedimentos.
- Resolver em Java (usando só synchronized e wait/notify/notifyAll) os
problemas do banheiro unisex, da ponte de uma mão só e da montanha
russa (roller coaster).
Esta segunda lista de exercícios tem o mesmo objetivo da primeira:
ajudar no estudo individual de vocês. Antes de atacar os exercícios
mais difíceis do Andrews (do 5.7 para frente) é bom revisar a matéria
de monitores, os problemas resolvidos com monitores vistos em classe
(bounded buffer, readers and writers, timer, sleeping barber) e fazer
um exercício mais fácil, como o do banheiro unisex.
Todo mundo tende a se confundir quando muda de semáforos para monitores.
Para cada problema, procurem comparar a solução com semáforos e a solução
com monitores. (Vocês já devem ter resolvido com semáforos a maioria dos
problemas acima.) Tenham bem clara uma diferença importante: chamadas a
V() num semáforo são sempre "lembradas" pelo semáforo. Já as chamadas a
signal() numa variável de condição são completamente ignoradas se nenhum
processo ou thread estiver executando um wait() na variável de condição.
Reparem que a especificação dos procedimentos do monitor pode fazer
parte do problema. (Isso é o que acontece na vida real.) Se eu só
dissesse "resolva o problema do banheiro unisex usando um monitor",
vocês teriam o trabalho adicional de definir a interface do monitor.
Quando se muda de monitores (no sentido do Andrews) para os "monitores
restritos" oferecidos por Java, é importante lembrar que Java só dá uma
variável de condição por monitor. E tomar cuidado com o "nested monitor
lockout". Às vezes é bem difícil evitá-lo!
Bom estudo,
Reverbel