В руководстве Intel говорится:
8.1.4 Влияние операции LOCK на внутренние кэши процессора
...
Механизм согласованности кэша автоматически предотвращает одновременное изменение данных в этой области двумя или более процессорами, которые кэшировали одну и ту же область памяти.
Означает ли это, что префикс кода операции lock
бесполезен для программирования приложений?
Кэш ЦП всегда включен, и вся доступная для приложений память является кэшируемой, поэтому механизм согласованности кеша всегда начеку, чтобы защитить целостность ваших данных, хранящихся в общей памяти.
«Механизм согласованности кэша» является неотъемлемой частью кеш-памяти многоядерных процессоров, он работает всегда независимо от того, используете ли вы префикс lock
или нет.
Более подробный вопрос:
У меня процессор Core2Duo, и моя прикладная программа работает в двух параллельных потоках, работающих с общими глобальными переменными.
Безопасно ли мне пропускать префикс lock
в таких инструкциях, как lock add [ESI],EAX
и lock cmpxchg8b [ESI]
?
add [esi], eax
на самом деле является загрузкой, добавлением и магазином. - person Peter Cordes   schedule 26.03.2016