Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Soluções de Dormir e Acordar: produto|consumidor - os 2 processos compartilham um buffer de tamanho fixo, o processo produtor põe seus dados no buffer e o consumidor os retira, disso vem 2 problemas, o produtor quer por dados e o buffer pode estar cheio ou o comsumidor pode querer retirar com ele vazio. solução - no buffer uma variavel count controla a quantidade de dados presentes, no produtor, antes de por dados, ele checa o valor de count, se está com valor máximo, o produtor dorme, caso contrário ele coloca os dados e incrementa count, no consumidor, antes de retirar dados, ele checa se o valor de count = 0, se sim ele dorme, se não, retira dados e decrementa count. * Sempre testar para ver se o outro deve ser acordado, e fazendo se for o caso. Acesso irrestrito a count - o buffer está vazio e o consumidor acaba de checar que count = 0, o escalonador, por uma interrupção, decide acordar o produtor, então ele insere um item no buffer e incrementa count para 1, imaginado que o consumidor está dormindo, o produtor envia um wake-up para ele. Contudo o consumidor não está dormindo e não processa o wake-up, assim que o consumidor executar ele continua de onde parou, e então verifica o valor de count que avia visto, assim dormindo, pois acha que não existem informações no buffer. Assim, uma hora o produtor irá encher o buffer e ir dormir, assim ambos dormem para sempre * por não estar dormindo, o consumidor perde o sinal de acordar.
Compartilhar