[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: [reverbel-mac438] Bounded buffer com notify no lugar de notifyAll



no put:
while (usedSlots == array.length){
 notify();
 wait();
}
adicionando o mesmo notify no take faz com que a thread sempre acorde
outra antes de dormir. Deste modo não ficam 2 threads dormindo ao
mesmo tempo (espera ocupada alguém?).

Agora, se os métodos put e take esperarem em condições diferentes e
quando um termina dá notify no outro, acho que funciona. Mas precisa
adicionar um nível de synchronized.

On 6/7/06, Paulo ... <paulofknegrao@xxxxxxxxxxxx> wrote:
A troca do notifyAll por um simples notify sem o if
apresentada na aula passada pode apresentar um
deadlock no determinado escalonamento de processos:

Para um buffer de capacidade 1, considere os
processos:
T1: take
T2: take
T3: put
T4: put
T1, T2, T3, T4, T2, T1

-T1 espera no wait, pois o buffer esta vazio.

-T2 espera no wait, pois o buffer esta vazio.

-T3 da put e notify en T2 e termina.

-T4 chega durante a execucao de T3, assume o controle
do monitor e espera no wait, pois o buffer esta cheio.

-T2 recebe o controle do monitor, notify em T1 e
termina.

-T1 continua no wait, pois o buffer esta vazio.


__________________________________________________ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/



--
Software is like sex: It's better when it's free. (Linus Torvalds)