在这个答案中,bdonlan 声明代码类似于以下内容:
int t;
volatile int a, b;
t = x;
a = t;
b = t;
编译器可以将其转换为:
a = x;
b = x;
我的问题是,如果x
是具有松弛负载的原子变量,这是否仍然允许,如下所示?
atomic<int> x;
int t;
volatile int a, b;
t = x.load(std::memory_order_relaxed);
a = t;
b = t;
assert(a == b); // Will this hold?
正如标题所说,是否允许 C++11 编译器引入额外的原子变量负载?额外的商店呢?