The Four Deadlock Conditions
Las Cuatro Condiciones del Deadlock
Coffman's conditions: (1) Mutual exclusion — resources cannot be shared. (2) Hold and wait — a thread holds one resource while waiting for another. (3) No preemption — resources cannot be forcibly taken. (4) Circular wait — a cycle of threads each waiting for the next. All four must be present. Break any one to prevent deadlock.
Las condiciones de Coffman: (1) Exclusión mutua — los recursos no pueden compartirse. (2) Retener y esperar — un hilo retiene un recurso mientras espera otro. (3) Sin desalojo — los recursos no pueden tomarse por la fuerza. (4) Espera circular — un ciclo de hilos cada uno esperando al siguiente. Las cuatro deben estar presentes. Rompe cualquiera para prevenir el deadlock.
Breaking the Circular Wait
Rompiendo la Espera Circular
The most practical solution: acquire all locks in a consistent global order. If every thread acquires lock A before lock B, circular wait is impossible. Another strategy: use timeouts — if a lock cannot be acquired within a deadline, release all held locks and retry.
La solución más práctica: adquiere todos los locks en un orden global consistente. Si cada hilo adquiere el lock A antes que el B, la espera circular es imposible. Otra estrategia: usa tiempos de espera — si no se puede adquirir un lock dentro de un plazo, libera todos los locks retenidos y vuelve a intentarlo.
✏️
Code Challenge
Desafío de Código
Identify the circular wait, then apply canonical lock ordering to fix it.
Identifica la espera circular y luego aplica el orden canónico de locks para corregirla.
💡 Key takeaway
Most deadlocks share one fix: always acquire multiple locks in the same canonical order throughout the entire codebase.
La mayoría de los deadlocks comparten una solución: siempre adquiere múltiples locks en el mismo orden canónico en toda la base de código.