Sobes.tech
Junior — Middle

Como pode evitar-se um deadlock entre dois threads numa aplicação multithread?

sobes.tech IA

Resposta da IA

O bloqueio mútuo (deadlock) ocorre quando dois ou mais threads esperam indefinidamente pela liberação de recursos uns pelos outros. Para evitar deadlocks, pode-se usar as seguintes abordagens:

  • Evitar bloqueios aninhados: minimizar a quantidade de recursos adquiridos simultaneamente.
  • Ordenar a aquisição de recursos: sempre adquirir os recursos na mesma ordem em todos os threads.
  • Usar timeouts: ao tentar adquirir um bloqueio, usar um timeout para evitar esperas infinitas.
  • Utilizar primitivas de sincronização de nível superior: por exemplo, do pacote java.util.concurrent no Android, que reduzem a probabilidade de deadlock.

Exemplo de aquisição ordenada de recursos:

synchronized (resourceA) {
    synchronized (resourceB) {
        // trabalho com os recursos
    }
}

Se todos os threads seguirem a ordem primeiro resourceA, depois resourceB, não ocorrerá deadlock.