Я не уверен, правильно ли я понял ваш вопрос, но я могу попытаться предоставить некоторые подробности о модели памяти C ++.
Порядок памяти по умолчанию для всех операций на атомике C ++: последовательный согласованный . Формально это означает, что существует единый общий порядок ( S ) всех последовательно согласованных операций (независимо от того, каким потоком они выполняются). Итак, если поток A выполняет seq-cst-store для некоторой переменной X , а поток B выполняет seq-cst-load для X , и магазин упорядочивается перед загрузкой в S , тогда гарантируется, что B увидит значение, сохраненное A (или какое-то новое значение ).
Однако, как только вы используете более расслабленный порядок памяти для своих операций, вы теряете эту гарантию, потому что эти более расслабленные операции atomi c обычно неупорядоченные . Однако вы можете ввести порядок с помощью отношения происходит до между определенными операциями. Например, загрузка-получение, которая видит значение, записанное хранилищем выпуска , синхронизируется с этим хранилищем, тем самым устанавливая связь «произошло до».
Модель памяти C ++, безусловно, является одной из более сложные аспекты языка и не могут быть полностью объяснены простым ответом. Для получения дополнительной информации я рекомендую продолжить чтение, например, эту статью, в которой я являюсь соавтором: Модели памяти для программистов C / C ++
Он не только охватывает модель памяти C ++, но также дает краткий обзор модели памяти x86 и ARM / Power, пытаясь объяснить, почему вообще необходимо иметь модель памяти.