Sincronização

0 respostas
E

Olá pessoal…

Tenho um problema que é semelhante ao problema da transferência de valores entre contas bancárias…Preciso bloquear as duas contas para que não ocorra inconsistências.Pensei em usar dois blocos synchronized aninhados, mas isso está me cheirando a deadlock:

Ex:

synchronized(conta1)

{

synchronized(conta2)

{



}

}

Pode ocorrer de um processo A querer transferir um valor x da conta 1 para a conta 2, enquanto um processo B queira transferir um valor y da conta 2 para a conta 1. Num contexto desses, A pode obter o bloqueio da conta 1 e B pode obter o bloqueio da conta 2. Mas A ficará esperando para obter o bloqueio da conta 2, enquanto B ficará esperando para obter o bloqueio da conta 1. Deadlock!!!
Está certo meu raciocínio?

Num problema desses, qual a solução mais interessante? Usar um java.util.concurrent.Semaphore?

O que o pessoal me diz?

Valeu gente…
java.util.concurrent.Semaphore

Criado 21 de maio de 2007
Respostas 0
Participantes 1