Instrucțiunea de testare și setare este o instrucțiune atomică utilizată în calcul în sisteme multiprocesor sau multi-core folosind memorie partajată, este utilizată pentru a scrie o valoare predeterminată într-o locație de memorie și a returna valoarea originală din acea locație. Are numărul doi de consens .
Acesta funcționează pe un singur memorie cuvânt (un octet sau octet ) poate fi revendicat adevărat ( true ) sau fals ( false ), uneori notată cu 0 și 1 , în unele limbi , cum ar fi C . Când este apelat, înlocuiește atomic valoarea stocată cu noua valoare dată ca argument și returnează valoarea stocată anterior.
Este folosit pentru a proteja o adresă de memorie în caz de acces simultan: dacă mai multe procese încearcă să acceseze aceeași adresă de memorie și un proces execută o instrucțiune de testare și setare pe aceeași adresă de memorie, atunci niciun alt proces nu poate executa o altă testează și setează instrucțiunile până când primul proces a terminat executarea instrucțiunii sale.
Instrucțiunea de testare și setare este utilizată în special pentru a scrie Spinlock (transl: Blocare prin rotație). Blocarea este gratuită atunci când valoarea cuvântului este falsă și este ocupată când este adevărată . Într-o posibilă implementare, o metodă lock()(transl. Lock) încearcă în mod repetat să execute instrucțiunea test-and-set pe cuvânt până când se întoarce fals , adică până când blocarea este eliberată. Pentru al elibera, metoda unlock()(transl. Deblocare) schimbă valoarea cuvântului în fals .
Exemple de utilizareNotă: instrucțiunea getAndSet(true)în Java funcționează la fel ca instrucțiunea test-and-set(true).