Laboratório 9 - 9/5/2001

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.