En la informática concurrente , interbloqueo es cualquier situación en la que ningún miembro de un grupo de entidades puede proceder porque cada uno espera a que otro miembro, incluido él mismo, tome medidas, como enviar un mensaje o, más comúnmente, liberar un bloqueo . [1] Los interbloqueos son un problema común en los sistemas de multiprocesamiento , computación paralela y sistemas distribuidos , porque en estos contextos los sistemas a menudo usan bloqueos de software o hardware para arbitrar recursos compartidos e implementar la sincronización de procesos . [2]
En un sistema operativo , se produce un interbloqueo cuando un proceso o subproceso entra en un estado de espera porque un recurso del sistema solicitado está retenido por otro proceso en espera, que a su vez está esperando otro recurso retenido por otro proceso en espera. Si un proceso permanece indefinidamente incapaz de cambiar su estado porque los recursos solicitados por él están siendo utilizados por otro proceso que está esperando, entonces se dice que el sistema está en punto muerto. [3]
En un sistema de comunicaciones , los interbloqueos ocurren principalmente debido a la pérdida o corrupción de las señales más que a la disputa por los recursos. [4]
Puede surgir una situación de interbloqueo en un recurso si y solo si todas las siguientes condiciones ocurren simultáneamente en un sistema: [5]
Estas cuatro condiciones se conocen como las condiciones de Coffman desde su primera descripción en un artículo de 1971 de Edward G. Coffman, Jr. [8]
Si bien estas condiciones son suficientes para producir un interbloqueo en los sistemas de recursos de una sola instancia, solo indican la posibilidad de un interbloqueo en los sistemas que tienen múltiples instancias de recursos. [9]