Test-and-set är en enkel icke-brytande ( atomär ) processorinstruktion som kopierar värdet på en variabel till ett register och ställer in något nytt värde. Under exekveringen av denna instruktion kan processorn inte avbryta dess exekvering och växla till exekvering av en annan tråd. Om en multiprocessorarkitektur används, då medan en processor exekverar denna instruktion på en minnesplats, kan andra processorer inte komma åt den platsen, vilket kan uppnås genom att låsa minnesbussen.
Exempel:
enter_critical_section: TSL REGISTER, LOCK // Värdet på LOCK-variabeln kopieras in i registret // och ställ in på 1. CMP REGISTER, #0 // Gammalt värde jämförs med noll. JNE enter_critical_section // Om det inte är noll, så har någon redan gått in i det kritiska avsnittet och låst det. RET // Låset lyckades, återgå till anropsfunktionen.I det här fallet låses cellen upp med den vanliga MOV-proceduren:
leave_critical_section: MOV LOCK, #0 // Lås upp variabeln. RET // Återgå till anropsfunktionen.