[intro.progress] / 18:
Реализация должна гарантировать, что последнее значение (в порядке изменения), назначенное атомарной операцией или операцией синхронизации, станет видимым для всех других потоков в конечномпериод времени.
[atomics.order] / 12:
Реализации должны сделать атомные хранилища видимыми для атомных нагрузок в течение разумного промежутка времени.
Это необязательная рекомендация.Если ваша реализация следует за ними - как должны делать высококачественные реализации - у вас все в порядке.В противном случае вы облажались.В обоих случаях независимо от используемого порядка памяти.
В абстрактной машине C ++ отсутствует понятие «переупорядочение».В абстрактной семантике основной поток сохраняется в атомарном состоянии, а затем блокируется, и поэтому, если реализация делает хранилище видимым для нагрузок в течение конечного промежутка времени, тогда другой поток загрузит это сохраненное значение в течение конечного промежутка времени ипрекратить.И наоборот, если реализация по какой-либо причине не делает этого, тогда ваш другой поток будет зацикливаться вечно.Используемый порядок памяти не имеет значения.
Я никогда не считал целесообразным рассуждение о «переупорядочении».Он смешивает детали реализации низкого уровня с моделью памяти высокого уровня и делает вещи более запутанными, а не меньшими.