В архитектуре x86 магазины в том же месте памяти имеют общий порядок, например, см. это видео. Каковы гарантии в модели памяти С++ 11?
Точнее, в
-- Initially --
std::atomic<int> x{0};
-- Thread 1 --
x.store(1, std::memory_order_release);
-- Thread 2 --
x.store(2, std::memory_order_release);
-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);
int r2 = x.load(std::memory_order_acquire);
-- Thread 4 --
int r3 = x.load(std::memory_order_acquire);
int r4 = x.load(std::memory_order_acquire);
разрешен ли исход r1==1, r2==2, r3==2, r4==1
(по какой-либо архитектуре, отличной от x86)? Что делать, если я должен заменить все memory_order
на std::memory_order_relaxed
?