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.