PUC-Rio - Sistemas de Computação I - Prova 1 - 29/04/98
Usando semáforos, modele o processo fã e o processo demonstrador, lembrando que existem muitos fãs e apenas um demonstrador. Como cada fã é muito ardoroso, uma vez que ele chega ao stand ele não sai dali até assistir o filme. Suponha que há muitos telefones disponíveis na feira, e portanto que a tarefa de telefonar para casa não impõe nenhuma necessidade de sincronização.
Atenção: Observe que o demonstrador só pode começar a exibir o filme quando há 10 pessoas no stand, e que as pessoas que chegam durante uma exibição têm que esperar a próxima. E importante: observe que um fã só pode ir telefonar para a mãe depois que acaba a exibição do filme! Isso tem que estar modelado na sincronização entre os processos demonstrador e fãs.
Considere a seguinte solução, por monitor, para este problema:
monitor jantarComunal { processo canibal executa:
int comida = 0;
cond cozinheiro, travessa; void canibal() {
void seServe() { while(1) {
while (comida==0) { seServe()
signal(cozinheiro); come...;
wait(travessa); }
} }
comida--;
} processo cozinheiro:
void encheTravessa() {
wait(cozinheiro); void cozinheiro() {
comida = MUITA; while(1) {
signalAll(travessa); cozinha...
} encheTravessa();
} }
}
Suponha que esse monitor funciona com a disciplina ``signal como dica'' dada em sala (mas observe que ele admite filas separadas por variáveis de condição!). Explique por que essa solução não funciona corretamente e sugira uma forma de corrigí-la.
obs: Caso você não saiba que disciplina é essa, escolha uma disciplina compatível com a sintaxe apresentada e faça a questão usando essa disciplina.