#include <atomic>
#include <thread>
void test_relaxed()
{
using namespace std;
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(in a relaxed ordering example),上面的代码允许产生
r1 == r2 == 42
.
但是我已经在x86-64和arm64平台上测试过了,我得不到这个结果。有什么办法可以得到吗?