Test-and-set

Test-and-set  je jednoduchá nepřerušitelná ( atomická ) instrukce procesoru, která zkopíruje hodnotu proměnné do registru a nastaví nějakou novou hodnotu. Během provádění této instrukce nemůže procesor přerušit její provádění a přepnout se na provádění jiného vlákna. Je-li použita víceprocesorová architektura, pak zatímco jeden procesor provádí tuto instrukci na paměťovém místě, jiné procesory k tomuto umístění nemají přístup, čehož lze dosáhnout blokováním paměťové sběrnice.

Příklad:

zadejte_kritickou_sekci: TSL REGISTER, LOCK // Hodnota proměnné LOCK se zkopíruje do registru // a nastavte na 1. CMP REGISTER, #0 // Stará hodnota je porovnána s nulou. JNE enter_critical_section // Pokud je nenulová, pak již někdo vstoupil do kritické sekce a uzamkl ji. RET // Zámek byl úspěšný, návrat k volání funkce.

V tomto případě se buňka odemkne pomocí obvyklého postupu MOV:

opustit_kritickou_sekci: MOV LOCK, #0 // Odemknutí proměnné. RET // Návrat k volající funkci.

Viz také