在编写使用新引入的线程同步原语来利用宽松的内存顺序的C++ 11代码时,通常会看到

std::atomic<int> vv;
int i = vv.load(std::memory_order_acquire);

或者
vv.store(42, std::memory_order_release);

我很清楚为什么这很有意义。

我的问题是:组合vv.store(42, std::memory_order_acquire)vv.load(std::memory_order_release)也有意义吗?在哪种情况下可以使用它们?这些组合的语义是什么?

最佳答案

根本不允许这样做。 C++(11)标准对可以对装入/存储操作施加哪些内存顺序约束有要求。

对于负载(第29.6.5节):



对于商店:

关于c++ - 具有std::memory_order_release的atomic <T> .load(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20398094/

10-11 22:24
查看更多