gpt4 book ai didi

multithreading - C++11 编译器是否允许引入额外的原子变量负载?

转载 作者:行者123 更新时间:2023-12-01 03:54:38 27 4
gpt4 key购买 nike

this answer , 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 编译器引入额外的原子变量负载?额外的商店呢?

最佳答案

编译器可以在 as-if 规则下做任何事情,但是要两次加载相同的内存位置,编译器必须表明没有其他线程可以访问同一个变量。无论哪种方式,您都可以保证 a==b在你的例子中。

关于multithreading - C++11 编译器是否允许引入额外的原子变量负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com