Buscar

Soluções de Dormir e Acordar

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.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando