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.concurrentno 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.