原子<T> .load()与std :: memory_order_release

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)也有意义吗?在哪种情况下可以使用它们?这些组合的语义是什么?

Mat*_*Mat 5

这根本不允许.C++(11)标准对可以对加载/存储操作施加的内存顺序约束有要求.

对于载荷(§29.6.5):

要求:订单参数不是memory_order_release也不是memory_order_acq_rel.

对于商店:

要求:该命令参数不应memory_order_consume,memory_order_acquire也不memory_order_acq_rel.