Testare și setare

Test-and-set  este o instrucțiune simplă de procesor ( atomică ) care nu se întrerupe, care copiază valoarea unei variabile într-un registru și setează o nouă valoare. În timpul execuției acestei instrucțiuni, procesorul nu poate întrerupe execuția acesteia și nu poate trece la execuția unui alt thread. Dacă se utilizează o arhitectură multiprocesor, atunci în timp ce un procesor execută această instrucțiune pe o locație de memorie, alte procesoare nu pot accesa acea locație, ceea ce poate fi obținut prin blocarea magistralei de memorie.

Exemplu:

introduceți secțiunea_critică: TSL REGISTER, LOCK // Valoarea variabilei LOCK este copiată în registru // și setați la 1. CMP REGISTER, #0 // Valoarea veche este comparată cu zero. JNE enter_critical_section // Dacă este diferit de zero, atunci cineva a intrat deja în secțiunea critică și a blocat-o. RET // Blocare reușită, revenire la funcția de apelare.

În acest caz, celula este deblocată folosind procedura obișnuită MOV:

lăsați_secțiunea_critică: MOV LOCK, #0 // Deblochează variabila. RET // Revenirea la funcția de apelare.

Vezi și