Na aula de 16/4, discutimos a técnica de passagem de bastão para gerar um determinado tipo de solução com semáforos a partir da especificação mais abstrata com await. No laboratório de hoje vocês vão usar essa técnica para desenvolver uma solução para o problema do jantar comunal.
O problema do jantar comunal envolve n canibais e m cozinheiros, cada cozinheiro dispondo de seu próprio caldeirão e vítima. Os canibais se servem a partir de uma única travessa, e depois vão comer em um canto qualquer. Os cozinheiros ficam continuamente preparando comida e enchendo essa travessa.
Os canibais são muito famintos e ficam eternamente se servindo e a seguir comendo a porção que pegaram. Os cozinheiros preenchem a travessa com porções de tamanho igual, e cada vez que um canibal se serve ele retira exatamente uma porção. Quando ele vai se servir e não tem comida na travessa ele fica esperando até que tenha.
Cada cozinheiro fica continuamente preparando comida. Em cada sessão de preparação ele cozinha P porções. Quando ele termina de preparar as P porções, ele se dirige à travessa. No entanto, ele só coloca a comida na travessa se a travessa estiver vazia. Se não estiver, o cozinheiro espera até que esteja.
Modele esse problema com threads canibais e threads cozinheiros, desenvolvendo a solução com a técnica de passagem de bastão (para quem já tinha visto esse problema antes, atenção para o fato de que o enunciado está apresentado de forma ligeiramente diferente!!!).