Тестируйте и тестируйте и устанавливайте


В информатике инструкция ЦП test-and-set используется для реализации взаимного исключения в многопроцессорных средах. Хотя правильная блокировка может быть реализована с помощью проверки и установки, это может привести к конфликту ресурсов при занятой блокировке (вызванной блокировкой шины и аннулированием кеша, когда операция проверки и установки требует атомарного доступа к памяти ).

Протокол входа использует обычное чтение памяти для ожидания освобождения блокировки. Test-and-set используется только для попытки получить блокировку, когда обычное чтение памяти говорит, что она свободна. Таким образом, дорогостоящие операции с атомарной памятью происходят реже, чем при простом цикле проверки и установки.

Если используемый язык программирования поддерживает оценку короткого замыкания , протокол входа может быть реализован как:

Хотя эта оптимизация полезна в системном программировании , ее следует избегать в высокоуровневом параллельном программировании , когда ограничения неясны и неправильно поняты. Одним из примеров неправильного использования является аналогичная идиома, называемая блокировкой с двойной проверкой , которая небезопасна без специальных мер предосторожности и может быть анти-шаблоном . [1]