[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Exercícios
- Subject: Exercícios
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Fri, 21 Jun 2002 11:13:27 -0300 (EST)
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