Test-og-sæt

Test-and-set  er en simpel non-breaking ( atomic ) processorinstruktion, der kopierer værdien af ​​en variabel ind i et register og sætter en ny værdi. Under udførelsen af ​​denne instruktion kan processoren ikke afbryde dens eksekvering og skifte til udførelsen af ​​en anden tråd. Hvis der anvendes en multiprocessorarkitektur, så mens en processor udfører denne instruktion på en hukommelsesplacering, kan andre processorer ikke få adgang til denne placering, hvilket kan opnås ved at låse hukommelsesbussen.

Eksempel:

enter_critical_section: TSL REGISTER, LOCK // Værdien af ​​LOCK-variablen kopieres ind i registret // og sæt til 1. CMP REGISTER, #0 // Gammel værdi sammenlignes med nul. JNE enter_critical_section // Hvis den ikke er nul, så har nogen allerede gået ind i den kritiske sektion og låst den. RET // Lås lykkedes, vend tilbage til opkaldsfunktionen.

I dette tilfælde låses cellen op ved hjælp af den sædvanlige MOV-procedure:

leave_critical_section: MOV LOCK, #0 // Lås variablen op. RET // Vend tilbage til opkaldsfunktionen.

Se også