在编写使用新引入的线程同步原语来利用宽松的内存顺序的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/