En informática , un candado es un mecanismo de sincronización que permite el acceso exclusivo a un recurso compartido entre varios subprocesos . Los bloqueos son una forma de hacer cumplir la política de control de concurrencia .
Básicamente, se utiliza un bloqueo suave , que supone que cada subproceso intenta adquirir un bloqueo antes de acceder al recurso compartido correspondiente. Algunos sistemas proporcionan un mecanismo de bloqueo obligatorio que , cuando se usa, un intento de obtener acceso no autorizado a un recurso bloqueado se anulará al generar una excepción en el subproceso que intentó obtener acceso.
Un semáforo es el tipo de cerradura más simple. En cuanto al acceso a los datos , no se hace distinción entre modos de acceso: compartido (solo lectura) o exclusivo (lectura-escritura). En el modo compartido, varios subprocesos pueden solicitar un bloqueo para acceder a los datos en modo de solo lectura. El modo de acceso exclusivo también se utiliza en los algoritmos de actualización y eliminación.
Los tipos de bloqueos se distinguen por la estrategia de bloquear la continuación de la ejecución del hilo. En la mayoría de las implementaciones, una solicitud de bloqueo evita que el subproceso continúe ejecutándose hasta que el recurso bloqueado esté disponible.
Un spinlock es un bloqueo que espera en un bucle hasta que se concede el acceso. Tal bloqueo es muy eficiente si un subproceso espera un bloqueo durante un período de tiempo pequeño, evitando así una reprogramación excesiva de subprocesos. El costo de esperar el acceso será significativo si uno de los subprocesos mantiene el bloqueo durante mucho tiempo.
Para implementar efectivamente el mecanismo de bloqueo, se requiere soporte a nivel de hardware. El soporte de hardware se puede implementar como una o más operaciones atómicas , como " probar y configurar ", " buscar y agregar " o " comparar e intercambiar ". Dichas instrucciones permiten comprobar sin interrupción que el candado está libre y, en caso afirmativo, adquirir el candado.
En los sistemas monoprocesador, es posible ejecutar instrucciones sin interrupciones de hardware mediante el uso de instrucciones especiales o prefijos de instrucción que deshabilitan temporalmente las interrupciones, pero este enfoque no funciona en sistemas multiprocesador de memoria compartida. El soporte completo para bloqueos en un entorno multiprocesador puede requerir un soporte de hardware y software bastante complejo, con importantes problemas de tiempo .