No laboratório de hoje, vocês vão criar um programa com monitores. Para ver um exemplo de programa usando pthreads e monitores, clique aqui.
O problema do broadcast atômico pode ser considerado
uma extensão do problema do buffer limitado.
Suponha que n processos produtores e m processos
consumidores compartilham um buffer
de b posições.
O buffer oferece duas operações: deposita e retira.
Cada mensagem depositada é recebida por todos os m consumidores.
Cada consumidor deve receber as mensagens (quando chamar retira)
na ordem em que foram depositadas.
No entanto, os consumidores podem receber as mensagens em ritmos bem diferentes.
Por exemplo, um consumidor rápido pode já ter recebido as b mensagens
disponíveis no buffer e um mais lento não ter recebido
nenhuma delas.
Implemente, usando a idéia de monitores e as primitivas da
biblioteca pthreads, as operações deposita e retira
e um programa teste para elas.
Um produtor que chama deposita quando não há mais
espaço no buffer deve ficar bloqueado até que seja
possível depositar a mensagem.
Um consumidor que chama retira quando não há mais mensagens novas no buffer
para ele deve ficar bloqueado até que apareçca uma nova mensagem.
Utilize para o buffer a estrutura de dados que o livro utiliza para o buffer limitado (um array controlado por variáveis front, rear e count). A mensagem pode ser simplesmente um número inteiro. Fique atento para a necessidade de controlar o número de processos que já leram cada mensagem do buffer.