Нет, нет необходимости использовать инструкции MFENCE, SFENCE and LFENCE
в отношении префикса LOCK
.
MFENCE, SFENCE and LFENCE
инструкция гарантирует видимость памяти во всех ядрах процессора.Например, инструкция MOV
не может использоваться с префиксом LOCK
, поэтому, чтобы быть уверенным, что результат перемещения памяти виден всем ядрам ЦП, мы должны быть уверены, что кэш ЦП сброшен в ОЗУ и что мы достигаем с ограждениеминструкции.
РЕДАКТИРОВАТЬ: подробнее о заблокированных атомарных операциях из руководства Intel:
ЗАБЛОКИРОВАННЫЕ АТОМНЫЕ ОПЕРАЦИИ
32-разрядный IA-32Процессоры поддерживают заблокированные атомарные операции над местами в системной памяти.Эти операции обычно используются для управления общими структурами данных (такими как семафоры, дескрипторы сегментов, системные сегменты или таблицы страниц), в которых два или более процессора могут одновременно пытаться изменить одно и то же поле или флаг.Процессор использует три взаимозависимых механизма для выполнения заблокированных атомарных операций:
• Гарантированные атомарные операции
• Блокировка шины с использованием сигнала LOCK # и префикса инструкции LOCK
•Протоколы когерентности кэша, обеспечивающие выполнение атомарных операций над структурами кэшированных данных (блокировка кэша);этот механизм присутствует в процессорах семейства Pentium 4, Intel Xeon и P6
Эти механизмы взаимозависимы в следующих отношениях.Определенные базовые транзакции памяти (такие как чтение или запись байта в системной памяти) всегда гарантированно обрабатываются атомарно.То есть после запуска процессор гарантирует, что операция будет завершена до того, как другому процессору или шинному агенту будет разрешен доступ к ячейке памяти.Процессор также поддерживает блокировку шины для выполнения выбранных операций с памятью (таких как операция чтения-изменения-записи в общей области памяти), которые обычно должны обрабатываться атомарно, но не обрабатываются автоматически таким образом.Поскольку часто используемые области памяти часто кэшируются в кэшах процессора L1 или L2, атомарные операции часто могут выполняться внутри кешей процессора без утверждения блокировки шины.Здесь протоколы когерентности кэша процессора гарантируют, что другие процессоры, которые кэшируют те же самые области памяти, управляются должным образом, в то время как атомарные операции выполняются в областях кэшированной памяти.