Deadlock — puzle de orden de cerrojos

Reordena cómo los hilos toman sus cerrojos para que ninguno espere a otro eternamente. Un puzle que enseña la regla del orden global de cerrojos.

Nivel 1/5Arrastra los cerrojos o usa ← →

Reordena cada hilo para que ninguno espere a otro para siempre.

T1adquiere
  1. 🔒 A
  2. 🔒 B
T2adquiere
  1. 🔒 B
  2. 🔒 A
Cómo jugar
  • Cada fila es un hilo y las fichas son los cerrojos que toma, de izquierda a derecha.
  • Arrastra una ficha (o usa las flechas) para cambiar el orden en que un hilo adquiere sus cerrojos.
  • Si dos hilos toman el mismo par en orden opuesto pueden congelarse para siempre. La solución es un único orden global que todos respeten: pulsa Ejecutar para comprobarlo.

Cómo funciona

Cada fila es un hilo y cada ficha un cerrojo que adquiere, de izquierda a derecha. Cuando dos hilos toman el mismo par en orden opuesto, existe un entrelazado en el que cada uno retiene uno y espera el otro, y ninguno avanza jamás. Pulsa Ejecutar y se comprueba si el grafo de espera tiene un ciclo; si lo hay, los cerrojos culpables se iluminan en rojo. La solución es la regla que adoptan las bases de código reales: elegir un orden global de cerrojos y que todos los hilos lo sigan.

Un puzle didáctico. Modela ciclos de retención y espera, la condición de interbloqueo que se puede evitar por diseño; los sistemas reales además usan tiempos de espera, estructuras sin cerrojos y deben pensar en el livelock.

Preguntas frecuentes

¿Qué causa realmente un interbloqueo aquí?

Un ciclo en el grafo de espera. Si el hilo 1 retiene A y quiere B mientras el hilo 2 retiene B y quiere A, ambos esperan para siempre. El juego dibuja exactamente ese ciclo cuando lo encuentra.

¿Por qué ordenar los cerrojos lo soluciona?

Si todos los hilos adquieren los cerrojos en el mismo orden global, el ciclo es imposible: un hilo solo puede esperar un cerrojo posterior a los que ya retiene, así que el grafo permanece acíclico. Es la regla estándar de jerarquía de cerrojos.

¿Así se detectan los interbloqueos reales?

La comprobación de ciclos es la misma idea que usan los detectores de inversión de orden como ThreadSanitizer. Las herramientas reales observan el orden en ejecución; aquí ves todo el grafo de golpe.

Herramientas relacionadas

Inserta este juego

Añade este juego gratuito a tu propio sitio: