1 - Problema do Produtor-Consumidor (Continuação)
Nesta etapa do nosso estudo serão demonstradas duas soluções para o problema do produtor-consumidor visto no módulo anterior. Neste referido problema é possível generalizá-lo para m produtores, n consumidores e k posições de buffer. Porém somente consideraremos duas situações distintas com apenas um produtor e um consumidor:
- a primeira, o buffer terá uma única posição de memória, como no exemplo do módulo anterior, que demonstra o problema em si. Só que agora, o problema da falta de integridade não mais ocorrerá, pois as duas threads que acessam o buffer serão sincronizadas;
- a segunda, o buffer terá um número inteiro fixo de posições de memória. No nosso exemplo esse número será de cinco posições. A finalidade aqui, além da integridade, é conseguir melhorar a performance do programa, como será explicado logo a seguir.
Observe que o buffer sempre é de tamanho fixo, seja de uma única posição ou de cinco posições. Apesar de possuírem mais semelhanças que diferenças, podemos citar duas principais diferenças entre esses dois exemplos:
- a primeira diz respeito ao tipo de controle necessário: para o buffer de uma única posição será utilizado o mutex e para o buffer de cinco posições será utilizado o semáforo. Observe que o uso de mutex ou semáforo sempre será por meio de um monitor. Não se esqueça de observar a ordem (bloqueio e sinais) das instruções nos métodos do monitor. Essa ordem é ESSENCIAL;
- a segunda, e não menos importante, resume-se na quantidade de vezes que uma thread deve esperar pela outra (performance) no acesso ao buffer. É óbvio que inúmeras outras variáveis, de dimensões diversas, podem interferir nessa performance. Contudo, a análise aqui proposta, diz respeito apenas a quantidade de vezes que uma thread terá que interromper seu processamento em função do buffer estar cheio ou vazio. O objetivo é demonstrar, de modo mais simples possível, a solução para ambos os problemas, tanto do ponto de vista da integridade do buffer como também da performance de acesso.
Copyright © 2016 AIEC.