Un conjunto de procesos está en interbloqueo (deadlock) si cada proceso del conjunto espera un evento que sólo puede causar otro proceso del conjunto. Aparece con frecuencia al usar Sistemas Operativos/Semáforos y Sistemas Operativos/Mutex y monitores en orden incorrecto.
Uso de un recurso: solicitar → usar → liberar.
Las cuatro deben cumplirse para que haya interbloqueo:
Procesos como círculos, recursos como cuadrados. Arista recurso → proceso: el recurso está asignado. Arista proceso → recurso: el proceso lo solicita. Un ciclo en el grafo (con una instancia por recurso) indica interbloqueo.
Si los interbloqueos son raros y el coste de evitarlos alto, se ignoran. Es lo que hacen la mayoría de los SO de propósito general.
Conceder recursos sólo si el sistema queda en un estado seguro: uno donde existe un orden en que todos los procesos pueden terminar.
Algoritmo del banquero (Dijkstra, 1965): como un banquero que concede créditos, comprueba antes de cada asignación que el estado resultante sea seguro. Problema: requiere conocer de antemano las necesidades máximas, algo raro en la práctica.
Atacar una de las cuatro condiciones:
| Condición | Enfoque |
|---|---|
| Exclusión mutua | Usar spooling para todo (ej. un demonio de impresión) |
| Contención y espera | Solicitar todos los recursos al inicio |
| No apropiación | Virtualizar recursos |
| Espera circular | Ordenar numéricamente los recursos y pedirlos en orden |
La última es la más práctica: si todos los hilos toman los candados en el mismo orden global, no puede haber ciclos.
Ver Sistemas Operativos/Problemas clásicos de IPC (la cena de los filósofos).