8.1.2 Блокировка шины
Процессоры Intel 64 и IA-32 обеспечивают сигнал LOCK #, который утверждается автоматически во время определенных операций с критической памятью, чтобы заблокировать системной шины или эквивалентной ссылки. Хотя этот выходной сигнал утверждается, запросы от других процессоров или агентов шины для управления шиной блокируются. Программное обеспечение может указывать другие случаи, когда LOCK семантика должна сопровождаться добавлением префикса LOCK к инструкция.
Он исходит из руководства Intel, том 3
Похоже, что атомные операции в памяти будут выполняться непосредственно в памяти (ОЗУ). Я смущен, потому что я вижу "ничего особенного" при анализе сборки. В принципе, выход сборки, сгенерированный для std::atomic<int> X; X.load()
, ставит только "лишнее" mfence. Но он отвечает за правильное упорядочение памяти, а не за атомарность. Если я правильно понимаю, X.store(2)
просто mov [somewhere], $2
. И это все. Кажется, что он не "пропускает" кеш. Я знаю, что перемещение (например, ints) в память является атомарным. Однако я смущен.
Итак, я представил свои сомнения, но главный вопрос: