Produtor consumidor
O problema do produtor consumidor
O problema do produtor consumidor é um problema clássico de sincronização condicional. Sincronização condicional é uma situação em que o acesso ao recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso. Um recurso pode não se encontrar pronto para o uso devido a uma condição especifica. Nesse caso, o processo que deseja acessa-lo deverá permanecer bloqueado até que o recurso fique disponível.
No produtor consumidor existem dois processos que compartilham um buffer comum e que possui o seu tamanho fixo. Um deles é o processo produtor, responsável por inserir dados nesse buffer e o outro é o consumidor, responsável por retirar esses dados do buffer e executar quaisquer que sejam os procedimentos para o processamento daquela informação.
O problema ocorre quando o processo produtor tenta inserir um dado em um buffer que já está cheio, ou quando o processo consumidor tenta ler dados de um buffer vazio. Para ambas as situações é necessário utilizar mecanismos que controlem essas condições para o uso do recurso compartilhado e para coordenar o acesso concorrente a esse recurso.
Soluções para o consumidor e produtor
Ao longo dos anos alguns algoritmos que permitem a solução do problema do produtor consumidor foram desenvolvidos. Um deles é a solução de dormir e acordar, que utiliza a solução de espera ociosa, e a outra é a solução utilizando o conceito de semáforos.
1. 2.
Solução com Dormir e Acordar
A solução utilizando o conceito de dormir e acordar funciona de maneira que se coloca o processo produtor para dormir caso o buffer já esteja cheio e caso o buffer esteja vazio, coloca-se o processo consumidor para dormir.
Essa solução embora pareça