Condição de Disputa
Condição de Disputa
Condição de Disputa
- Antes de entrar em sua regio crtica, um processo chama enter_region, que faz uma
espera ociosa at que ele esteja livre de impedimento; ento ele verifica a varivel lock
e retorna. Depois da regio crtica, o processo chama leave_region, que pe um 0 na
varivel lock. Assim como todas as solues baseadas em regies crticas, o processo
deve chamar enter_region e leave_region em momentos corretos para o mtodo
funcionar. Se um processo trapacear, a excluso mtua falhar.
Obs.: Essas solues esto corretas mas apresentam o defeito de precisar da espera
ociosa. Quando quer entrar em sua regio critica, um processo verifica se sua entrada
permitida. Se no for, o processo ficar em um lao ocioso esperando at que seja
permitida a entrada. Esse mtodo no s gasta tempo de CPU, mas pode tambm ter
efeitos inesperados.
Dormir e Acordar:
- Comunicao interprocessos que bloqueiam em vez de gastar tempo de CPU, quando a
elas no permitido entrar em suas regies crticas. Uma das mais simples o par sleep
e wakeup. Sleep uma chamada ao sistema que faz com que quem a chama durma, isto
fique suspenso at que um outro processo o desperte. A chamada wakeup tem um
parmetro, o processo a ser despertado.
Produtor-consumidor
- Dois processos compartilham um buffer comum e de tamanho fixo. Um deles, o
produtor, pe informao dentro do buffer e o outro, o consumidor, a retira.
- O problema se origina quando o produtor quer colocar um novo item no buffer, mas
ele j est cheio. A soluo por o produtor para dormir e s despert-lo quando o
consumidor remover um ou mais itens. Da mesma maneira, se o consumidor quiser
remover um item do buffer e perceber que o mesmo est vazio, ele dormir at que o
produtor ponha algo no buffer e o desperte.