Testaa ja aseta

Test-and-set  on yksinkertainen ei-breaking ( atomi ) prosessoriohje, joka kopioi muuttujan arvon rekisteriin ja asettaa uuden arvon. Tämän käskyn suorittamisen aikana prosessori ei voi keskeyttää sen suorittamista ja siirtyä toisen säikeen suorittamiseen. Jos käytetään moniprosessoriarkkitehtuuria, silloin kun yksi prosessori suorittaa tätä käskyä muistipaikassa, muut prosessorit eivät pääse käsiksi kyseiseen sijaintiin, mikä voidaan saavuttaa lukitsemalla muistiväylä.

Esimerkki:

enter_critical_section: TSL REGISTER, LOCK // LOCK-muuttujan arvo kopioidaan rekisteriin // ja aseta arvoksi 1. CMP REGISTER, #0 // Vanhaa arvoa verrataan nollaan. JNE enter_critical_section // Jos se on muu kuin nolla, joku on jo siirtynyt kriittiseen osioon ja lukinnut sen. RET // Lukitus onnistui, palaa kutsutoimintoon.

Tässä tapauksessa solun lukitus avataan tavallisella MOV-menettelyllä:

left_critical_section: MOV LOCK, #0 // Avaa muuttujan lukitus. RET // Paluu kutsutoimintoon.

Katso myös