Здравствуйте, ·, Вы писали:
_>>Ха. Вообще то для чтения/записи atomic переменной используется в точности такая же инструкция, как и для обычного int'a. Можешь посмотреть на реальном коде https://godbolt.org/z/I3lOwe, если так до сих пор сам не понял и мне не веришь. Банально потому, что это эти инструкции атомарные от природы!
·>
·>Ну давай посмотрим вместе:
·>atomic:
·>·> mov DWORD PTR v[rip], 1
·> mfence
·>
·>non atomic:
·>·> mov DWORD PTR v1[rip], 1
·>
·>Действительно... одной инструкцией меньше, одной больше... Кака разница? В главном-то ты прав!
Ох, ну что за детский сад. Ты реально не в курсе что такое mfence? Ну мне даже лень объяснять, так что поясню проще:
https://godbolt.org/z/7zWFvr — с точки зрения вопросов атомарности это в точности тот же самых код с вполне корректным std::atomic, что и раньше, только переписанный чуть под другому. Дальше сам додумаешь? )))
Да, а ещё можешь там вообще убрать упоминания про std::atomic (оставить только голый int), но добавить вызов "atomic_thread_fence(std::memory_order_seq_cst);" и насладиться результатом.
И да, можешь ещё попереключать другие компиляторы/архитектуры с кодом по ссылке выше — может тогда поймёшь, что сохранение порядка записи/чтения на разных процессора задаётся по разному (не только отдельной инструкций, как в x86, но и например модифицированными операциями записи типа str/stlr), но к вопросу атомарности записи это отношения не имеет.