Deadlocks13 temas

Deadlocks

Cuando dos transacciones acceden a los mismos recursos pero en distinto orden, cada una puede quedar esperando que la otra libere algo que necesita. Ninguna avanza. Eso es un deadlock.


Las cuatro condiciones que lo hacen posible

Un deadlock se produce cuando se cumplen simultáneamente las cuatro condiciones siguientes:

Condición Descripción
Exclusión mutua Un recurso solo puede ser accedido por una transacción a la vez
Espera con tenencia Una transacción mantiene un lock y espera para adquirir otro
Sin preempción Un lock no puede ser arrebatado forzosamente a una transacción
Espera circular T1 espera a T2, T2 espera a T1 (o una cadena más larga de dependencias)

Si alguna de estas condiciones no se cumple, el deadlock no puede ocurrir.

Cómo se forma la espera circular

Diagrama: ciclo de espera entre dos transacciones

Ninguna de las dos transacciones puede avanzar. Ambas esperan infinitamente. La cadena de dependencias forma un ciclo y la base de datos concluye que hay un deadlock.


Cómo se manejan los deadlocks

Un deadlock no puede mantenerse indefinidamente, ya que impediría que las transacciones involucradas continuaran ejecutándose. Por ello, los gestores de bases de datos incorporan mecanismos internos para evitar que el ciclo llegue a formarse o detectarlo una vez que ocurre y restaurar el progreso del sistema.

Aunque los gestores manejan los deadlocks internamente, un buen diseño de las transacciones ayuda a reducir la probabilidad de que ocurran.


Qué no es un deadlock

  • No es un error del sistema. Es una consecuencia natural del uso de locks en concurrencia.
  • No corrompe datos. La base de datos revierte una transacción de forma controlada.
  • No ocurre solo entre dos transacciones. Puede involucrar cualquier cantidad de transacciones que formen un ciclo de espera.
  • No es exclusivo de las bases de datos. Cualquier sistema que use locks puede presentar deadlocks.

Autoevaluación: Deadlocks

1/3