Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:jantar_dos_selvagens [2011/06/17 20:34] – maziero | so:jantar_dos_selvagens [2017/08/03 11:14] (atual) – maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== O Jantar dos selvagens ====== | ||
+ | (problema adaptado do livro [[http:// | ||
+ | |||
+ | 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// " | ||
+ | |||
+ | < | ||
+ | while True: | ||
+ | servir() | ||
+ | comer() | ||
+ | </ | ||
+ | |||
+ | A //thread// " | ||
+ | |||
+ | < | ||
+ | while True: | ||
+ | encher_caldeirao() | ||
+ | dormir() | ||
+ | </ | ||
+ | |||
+ | 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**: |