Caso ainda tenha dúvidas sobre a eficiência e eficácia da solução, altere os códigos do produtor e consumidor de modo que os laços de repetição girem um número bem maior de vezes, por exemplo, 9000 vezes.

Lembre-se de que tal alteração deve ser feita simetricamente no produtor e no consumidor ao mesmo tempo. Alterar apenas um deles irá descaracterizar o exemplo e consequentemente seus resultados! Execute novamente o programa e observe os resultados. Certamente continuarão íntegros!

Contudo, observe também que a solução ora apresentada possui um problema de performance. Como dito anteriormente, a performance será avaliada apenas sob o aspecto da quantidade de vezes que uma thread produtora tem que esperar pela consumidora e vice-versa. Quaisquer outras variáveis ou dimensões estão sendo desconsideradas, por ora.

No caso de uma única posição no buffer, ambos, produtor e consumidor, não conseguem realizar acessos consecutivos ao buffer. Isso significa que o produtor não pode gravar uma vez e, na sequência (consecutivamente), gravar de novo no mesmo buffer, pois o mesmo sempre estará cheio. Isso é uma certeza!

Para o consumidor também não é possível ler uma vez, e na sequência, ler novamente, pois o buffer estará sempre vazio. Deste modo, ambas as threads não conseguem realizar mais de um único acesso consecutivo ao buffer. Isso se deve ao fato de o buffer ter apenas uma única posição disponível e a solução óbvia é aumentar o número de posições para que mais acessos consecutivos possam ser realizados por ambas as threads, como será demonstrado no próximo item.

Copyright © 2016 AIEC.