Problema Jantar dos Selvagens 2013-2

Problema do Jantar dos Selvagens

Uma tribo de selvagens está jantando ao redor de um grande caldeirão contendo M porções de ensopado de missionário cozido. Quando um selvagem tem fome, ele se serve no caldeirão, a menos que ele esteja vazio. Quando o caldeirão estiver vazio, o selvagem tem de acordar o cozinheiro e esperar que ele encha o caldeirão de volta, para então se servir novamente. Após encher o caldeirão, o cozinheiro volta a dormir.
Canibalismo

Detalhes do Programa

O programa deve conter o processo  "selvagem()" e o processo "cozinheiro()" que devem funcionar concorrentemente. Além disso deve usar um buffer compartilhado "caldeirão" de tamanho M=5.

Selvagem()

Cada selvagem deve ter o seguinte comportamento: se servir() e comer() continuamente. O tempo que cada selvagem leva para se servir é 1 segundo e o tempo para comer é 3 segundos.
Considere que haja 3 selvagens para comer.

Cozinheiro()

O cozinheiro apresenta o seguinte comportamento: prepara e enche_caldeirão() e depois volta a dormir(). Existe apenas um cozinheiro na tribo. O tempo de preparação do jantar é  5 segundos.

Restrições

  • Selvagens não podem se servir ao mesmo tempo (mas podem comer ao mesmo tempo).
  • Selvagens não podem se servir se o caldeirão estiver vazio.
  • Selvagens só podem se servir depois que o cozinheiro terminar de preparar o jantar.
  • O cozinheiro só pode encher o caldeirão quando ele estiver vazio.

Tarefa

Desenvolver um algoritmo concorrente para as ações dos selvagens e o cozinheiro.O programa pode ser escrito em CC++Java ou Python.

O programa deve funcionar durante 2 min. Indicar durante a execução do programa os eventos: selvagem servindo e comendo, cozinheiro enchendo e dormindo. Ao final da execução mostrar quantas vezes o cozinheiro precisou encher o caldeirão e quantas vezes cada selvagem comeu,

Comments