Sobes.tech
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.concurrent en 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.