Tob*_*ull 2 multithreading atomicity c++11
在编写使用新引入的线程同步原语的C++ 11代码时,您可以使用轻松的内存排序
std::atomic<int> vv;
int i = vv.load(std::memory_order_acquire);
Run Code Online (Sandbox Code Playgroud)
要么
vv.store(42, std::memory_order_release);
Run Code Online (Sandbox Code Playgroud)
我很清楚为什么这是有道理的.
我的问题是:你的组合vv.store(42, std::memory_order_acquire)和vv.load(std::memory_order_release)也有意义吗?在哪种情况下可以使用它们?这些组合的语义是什么?
这根本不允许.C++(11)标准对可以对加载/存储操作施加的内存顺序约束有要求.
对于载荷(§29.6.5):
要求:订单参数不是
memory_order_release也不是memory_order_acq_rel.
对于商店:
要求:该命令参数不应
memory_order_consume,memory_order_acquire也不memory_order_acq_rel.