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.