Lock (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 al 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 de aviso , donde cada hilo 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 exclusivos, 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 hilo. 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 bloqueo de giro , 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.

Las cerraduras 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 la cerradura está libre y, si está libre, adquirir la cerradura en una sola operación atómica.

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