Bloqueo mutuo

Cuatro procesos (líneas azules) compiten por un recurso (círculo gris), siguiendo una política de derecha-antes que-izquierda. Un bloqueo mutuo aparece cuando todos los procesos bloquean el recurso simultáneamente (líneas negras). El bloqueo puede resolverse rompiendo la simetría.

En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos.[1]​ A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos.

Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que tomó.

En el siguiente ejemplo, dos procesos compiten por dos recursos que necesitan para funcionar, que solo pueden ser utilizados por un proceso a la vez. El primer proceso obtiene el permiso de utilizar uno de los recursos (adquiere el lock sobre ese recurso). El segundo proceso toma el lock del otro recurso, y luego intenta utilizar el recurso ya utilizado por el primer proceso, por lo tanto queda en espera. Cuando el primer proceso a su vez intenta utilizar el otro recurso, se produce un interbloqueo, donde los dos procesos esperan la liberación del recurso que utiliza el otro proceso.

Representación de Bloqueos Mutuos usando grafos

Ejemplo de representación de Bloqueo Mutuo en grafos de asignación de recursos con dos procesos A y B, y dos recursos R1 y R2.

El Bloqueo mutuo también puede ser representado usando grafos dirigidos, donde el proceso es representado por un círculo y el recurso, por un cuadrado. Cuando un proceso solicita un recurso, una flecha es dirigida desde el proceso al recurso. En cambio, cuando un recurso está asignado a un proceso, una flecha es dirigida del recurso al proceso.[2]

En la figura del ejemplo, se pueden ver dos procesos diferentes (A y B), cada uno con un recurso diferente asignado (R1 y R2). En este ejemplo clásico de bloqueo mutuo, es fácilmente visible la condición de espera circular en la que los procesos se encuentran, donde cada uno solicita un recurso que está asignado a otro proceso.

Other Languages
العربية: استعصاء
বাংলা: ডেডলক
català: Interbloqueig
čeština: Deadlock
dansk: Deadlock
English: Deadlock
français: Interblocage
magyar: Holtpont
italiano: Deadlock
한국어: 교착 상태
македонски: Застој
монгол: DeadLock
português: Deadlock
Simple English: Deadlock
српски / srpski: Застој
Türkçe: Deadlock
Tiếng Việt: Deadlock
中文: 死锁