void test_relaxed()
{
atomic<int> x{0};
atomic<int> y{0};
std::thread t1([&] {
auto r1 = y.load(memory_order_relaxed); //a
x.store(r1, memory_order_relaxed); //b
});
std::thread t2([&] {
auto r2 = x.load(memory_order_relaxed); //c
y.store(42, memory_order_relaxed); //d
});
t1.join();
t2.join();
}
根据cppreference,上面的代码允许产生r1 == r2 == 42。但是我在x86-64和arm64平台上测试过,我无法得到这个结果。有什么办法可以得到吗?