Interested Article - Test-and-set
ainsleigh
- 2021-11-18
- 1
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 // Возврат в вызывающую функцию.
См. также
|
В статье
не хватает
ссылок на источники
(см.
рекомендации по поиску
).
|
ainsleigh
- 2021-11-18
- 1