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

Exercícios



Várias pessoas pediram sugestões de exercícios para resolver como 
preparação para a segunda prova. Aí vão alguns exercícios sobre os 
útimos assuntos que estudamos (monitores e programação concorrente 
em Java).

- Do capítulo 5 do Andrews: 5.1, 5.4, 5.7, 5.9 e 5.17. (Os três 
  primeiros já estavam na lista divulgada antes da primeira prova.) 

- 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
  ou threads que chamam esses procedimentos.

- Resolver em Java (usando synchronized e wait/notify/notifyAll) os
  problemas do banheiro unisex, da ponte de uma mão só e da montanha
  russa (roller coaster). 

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 (abstratos) para 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