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

Segunda lista de exercícios



- 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