Interbloqueo
Un interbloqueo es una condición en la que un programa no puede acceder a un recurso que necesita para continuar. Cuando una aplicación activa encuentra un interbloqueo, puede «bloquearse» o dejar de responder.
Los recursos, como los datos guardados o almacenados en la caché, pueden bloquearse cuando un proceso específico dentro de un programa accede a ellos. Bloquear los datos evita que otros procesos los sobrescriban antes de tiempo. Si un proceso o una consulta necesita acceder a datos bloqueados, pero el proceso que bloquea los datos no los libera, puede producirse un interbloqueo.
Por ejemplo, la siguiente situación causará un interbloqueo entre dos procesos:
- El proceso 1 solicita el recurso B al proceso 2.
- El recurso B está bloqueado mientras el proceso 2 se ejecuta.
- El proceso 2 necesita el recurso A del proceso 1 para terminar de ejecutarse.
- El recurso A está bloqueado mientras el proceso 1 se ejecuta.
El resultado es que el proceso 1 y el proceso 2 esperan a que el otro termine. Como ninguno de los procesos puede continuar hasta que el otro finalice, se crea un interbloqueo.
Cómo evitar los interbloqueos
Los desarrolladores pueden evitar los interbloqueos evitando las condiciones de bloqueo en la lógica de sus programas. Por ejemplo, en lugar de hacer que dos procesos dependan uno del otro, el código fuente puede escribirse de modo que cada hilo termine antes de que otro hilo necesite sus recursos. Al asegurarse de que los datos estén disponibles cuando se necesiten, los programadores pueden evitar que sus aplicaciones se bloqueen o fallen.
NOTE: Los interbloqueos también pueden producirse cuando se ejecutan dos o más consultas en una base de datos. Las bases de datos transaccionales bloquean los registros activos, lo que impide que otras consultas accedan a ellos. Si un proceso no puede acceder a un registro bloqueado, puede producirse un interbloqueo en la base de datos.
Pon a prueba tu conocimiento