Bloqueo (informática)


En informática , un bloqueo o mutex (de exclusión mutua ) es una primitiva de sincronización : un mecanismo que impone límites en el acceso a un recurso cuando hay muchos hilos de ejecución . Un bloqueo está diseñado para hacer cumplir una política de control de concurrencia de exclusión mutua , y con una variedad de métodos posibles, existen múltiples implementaciones únicas para diferentes aplicaciones.

Generalmente, los bloqueos son bloqueos consultivos , donde cada subproceso coopera adquiriendo el bloqueo antes de acceder a los datos correspondientes. Algunos sistemas también implementan bloqueos obligatorios , donde el intento de acceso no autorizado a un recurso bloqueado forzará una excepción en la entidad que intenta realizar el acceso.

El tipo de bloqueo más simple es un semáforo binario . Proporciona acceso exclusivo a los datos bloqueados. Otros esquemas también brindan acceso compartido para leer datos. Otros modos de acceso ampliamente implementados son exclusivo, con intención de excluir y con intención de actualizar.

Otra forma de clasificar los bloqueos es por lo que sucede cuando la estrategia de bloqueo impide el progreso de un subproceso. La mayoría de los diseños de bloqueo bloquean la ejecución del subproceso que solicita el bloqueo hasta que se le permite acceder al recurso bloqueado. Con un spinlock , el hilo simplemente espera ("gira") hasta que el bloqueo esté disponible. Esto es eficaz si los subprocesos se bloquean durante un breve período de tiempo, ya que evita la sobrecarga de la reprogramación del proceso del sistema operativo. Es ineficaz si el bloqueo se mantiene durante mucho tiempo o si el progreso del subproceso que mantiene el bloqueo depende de la preferencia del subproceso bloqueado.

Los bloqueos generalmente requieren soporte de hardware para una implementación eficiente. Este soporte generalmente toma la forma de una o más instrucciones atómicas como " probar y configurar ", " buscar y agregar " o " comparar e intercambiar ". Estas instrucciones permiten que un solo proceso pruebe si el candado está libre y, si lo está, adquirir el candado en una sola operación atómica.

Las arquitecturas de un solo procesador tienen la opción de usar secuencias ininterrumpidas de instrucciones (usando instrucciones especiales o prefijos de instrucciones para deshabilitar las interrupciones temporalmente), pero esta técnica no funciona para máquinas de memoria compartida con multiprocesador . El soporte adecuado para bloqueos en un entorno multiprocesador puede requerir un soporte de hardware o software bastante complejo, con importantes problemas de sincronización .