Test-and-set es una instrucción de procesador simple que no se rompe ( atómica ) que copia el valor de una variable en un registro y establece algún valor nuevo. Durante la ejecución de esta instrucción, el procesador no puede interrumpir su ejecución y cambiar a la ejecución de otro hilo. Si se utiliza una arquitectura multiprocesador, mientras un procesador ejecuta esta instrucción en una ubicación de memoria, otros procesadores no pueden acceder a esa ubicación, lo que se puede lograr bloqueando el bus de memoria.
Ejemplo:
entrar_sección_crítica: REGISTRO TSL, BLOQUEO // El valor de la variable BLOQUEO se copia en el registro // y se establece en 1. REGISTRO CMP, #0 // El valor anterior se compara con cero. JNE enter_critical_section // Si es distinto de cero, entonces alguien ya ingresó a la sección crítica y la bloqueó. RET // Bloqueo exitoso, volver a la función de llamada.En este caso, la celda se desbloquea mediante el procedimiento MOV habitual:
dejar_la_sección_crítica: MOV LOCK, #0 // Desbloquea la variable. RET // Vuelve a la función de llamada.