Junior — Middle
¿Cómo se puede prevenir un bloqueo mutuo de dos hilos en una aplicación multihilo?
sobes.tech AI
Respuesta de la IA
El bloqueo mutuo (deadlock) ocurre cuando dos o más hilos esperan indefinidamente liberar recursos entre sí. Para prevenir deadlocks, se pueden usar los siguientes enfoques:
- Evitar bloqueos anidados: minimizar la cantidad de recursos que se adquieren simultáneamente.
- Ordenar la adquisición de recursos: siempre adquirir los recursos en el mismo orden en todos los hilos.
- Usar timeouts: al intentar adquirir un bloqueo, usar un timeout para evitar esperas infinitas.
- Utilizar primitivas de sincronización de nivel superior: por ejemplo, del paquete
java.util.concurrenten Android, que reducen la probabilidad de deadlock.
Ejemplo de adquisición ordenada de recursos:
synchronized (resourceA) {
synchronized (resourceB) {
// trabajo con los recursos
}
}
Si todos los hilos siguen el orden primero resourceA, luego resourceB, no se producirá deadlock.