首页 > 试题广场 >

关于C++的内存模型,以下代码中memory_order_r

[单选题]
关于C++的内存模型,以下代码中memory_order_relaxed的使用是否正确?
#include <atomic>
#include <thread>
std::atomic<int> x{0}, y{0};
void writer() {
    x.store(1, std::memory_order_relaxed);
    y.store(1, std::memory_order_relaxed);
}
void reader() {
    while (y.load(std::memory_order_relaxed) != 1);
    assert(x.load(std::memory_order_relaxed) == 1);
}
  • 正确,relaxed顺序足以保证assert不会触发
  • assert可能触发,因为relaxed不保证不同原子变量之间的操作顺序
  • 编译错误,relaxed不能用于store
  • 未定义行为,atomic不能使用relaxed

这道题你会答吗?花几分钟告诉大家答案吧!