uilianries
(usa Linux Mint)
Enviado em 13/08/2015 - 00:00h
Produtor / Consumidor é um processo de sincronização entre threads, onde duas ou mais threads compartilham recursos independente uma da outra.
Um exemplo prático é a impressora de papel, onde o produtor é um computador e o consumidor é a impressora. Quando queremos imprimir algo, enviamos o arquivo para uma fila de impressão e esta é consumida pela impressora. Podemos enviar vários arquivos de uma só vez para a fila, mas a impressora só irá consumir um por vezes e depois de terminar um impressão completa.
Olhando para esse código:
Existem duas funções, onde cada uma deverá ser executada em thread separada.
A função produtor, está presa a um laço infinito, para dizer que sempre irá processar, o dado compartilhado, são os objetos Mensagem.
Primeiro ele aguarda o tal envelope. Isso serve para dizer, okay, há espaço na fila para inserir uma nova mensagem para ser consumida. A fila possui um tamanho limitado. O segundo passo, produz_msg(), gera uma nova Mensagem e armazena em msg. msg será despachada para a fila, com a função send.
O consumidor envia uma série de envelopes, esse é ponto que diz, a fila tem MAXFILA posições. Seguido disso, aguarda uma mensagem do produtor, uma vez recebida, armazena em msg. Após, envia a notificação de volta para liberar a fila e consome a mensagem. Esses dois últimos passos servem para não bloquear o produtor. Uma vez que tenha recebido a mensagem da fila, a fila deve ser liberada para desbloquear o produtor, que aguarda uma oportunidade para inserir uma nova mensagem.