Test-and-set | это... Что такое Test-and-set? (original) (raw)

Test-and-set — простая неразрывная (атомарная) процессорная инструкция, которая копирует значение переменной в регистр, и устанавливает некое новое значение. Во время исполнения данной инструкции процессор не может прервать её выполнение и переключится на выполнение другого потока. Если используется многопроцессорная архитектура, то пока один процессор выполняет эту инструкцию с ячейкой памяти, то другие процессоры не могут получить доступ к этой ячейке, может достигаться путем кратковременного блокирования шины памяти.

Пример:

enter_critical_section: TSL REGISTER, LOCK // Значение переменной LOCK копируется в регистр // и устанавливается в 1. CMP REGISTER, #0 // Старое значение сравнивается с нулем. JNE enter_critical_section // Если оно ненулевое, значит кто-то уже вошел в критическую секцию и заблокировал её.

 RET                // Блокировка выполнена успешно, возвращаемся в вызывающую функцию.

При этом разблокирование ячейки производится обычной процедурой MOV:

leave_critical_section: MOV LOCK, #0 // Разблокирование переменной. RET // Возврат в вызывающую функцию.