Así es como funciona:
1. Link de carga (LL): Esta instrucción carga el valor de una ubicación de memoria en un registro. Críticamente, también establece una bandera o bloqueo interno asociado con esa ubicación de memoria. Este indicador indica que este procesador en particular ha reclamado la ubicación para una actualización potencial.
2. Cálculo: El procesador luego realiza su cálculo en el valor cargado en el registro.
3. Store condicional (SC): Esta instrucción intenta almacenar el valor modificado desde el registro nuevamente en la ubicación de la memoria. El éxito de esta operación depende de si el indicador de LL todavía tiene el mismo procesador que el mismo procesador sigue sosteniendo el mismo procesador. Si el indicador todavía está configurado (lo que significa que ningún otro procesador ha accedido a la ubicación de la memoria mientras tanto), la instrucción SC tiene éxito y se borra el indicador. Si el indicador no está configurado (porque otro procesador ha realizado una operación LL/SC en la misma ubicación), la instrucción SC falla y la ubicación de memoria permanece sin cambios.
En esencia, LL/SC proporciona un mecanismo para probar y modificar una ubicación de memoria atómicamente. Esto significa que toda la operación (leer, modificar, escribir) se trata como una unidad única e indivisible, evitando las condiciones de carrera y garantizar la integridad de los datos. Sin LL/SC, el acceso concurrente podría conducir a resultados impredecibles e incorrectos debido a lecturas y escrituras entrelazadas.
Muchas arquitecturas ofrecen instrucciones LL/SC, o mecanismos equivalentes, para facilitar las estructuras y algoritmos de datos sin bloqueo que evitan la sobrecarga de mutexes o semáforos tradicionales. Sin embargo, el uso de LL/SC requiere una programación cuidadosa para manejar el potencial de fallas de SC e implementar mecanismos de reintento apropiados.