Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Próxima revisão
Revisão anterior
so:jantar_dos_selvagens [2011/06/17 19:50] – created mazieroso:jantar_dos_selvagens [2017/08/03 11:14] (atual) maziero
Linha 1: Linha 1:
 +====== O Jantar dos selvagens ======
  
 +(problema adaptado do livro [[http://greenteapress.com/wp/semaphores|Little Book of Semaphores]], de A. Downey)
 +
 +Uma tribo de selvagens está jantando ao redor de um grande caldeirão contendo N porções de missionário cozido. Quando um selvagem quer comer, ele se serve no caldeirão, a menos que ele esteja vazio. Nesse caso, o selvagem primeiro 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.
 +
 +O comportamento de cada //thread// "selvagem" é o seguinte:
 +
 +<code>
 +while True:
 +  servir()
 +  comer()
 +</code>
 +
 +A //thread// "cozinheiro" tem o seguinte comportamento:
 +
 +<code>
 +while True:
 +  encher_caldeirao()
 +  dormir()
 +</code>
 +
 +As restrições de sincronização são:
 +
 +  * 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.
 +  * O cozinheiro só pode encher o caldeirão quando ele estiver vazio.
 +
 +**Desafio**: completar o código dos selvagens e do cozinheiro para atender as restrições de sincronização.