gpt4 book ai didi

c++ - 我们如何强制变量共享?

转载 作者:行者123 更新时间:2023-12-02 09:56:30 24 4
gpt4 key购买 nike

考虑以下代码:

std::atomic<bool> flag(false);
//Thread 1
flag.store(true,std::memory_order_relaxed);
//Thread 2
while(!flag.load(std::memory_order_relaxed)) ; // stay in the loop
std::cout << "loaded";

是否有保证可以执行最后一行?
如果答案是否定的,应该如何解决(尽可能减少开销)?

最佳答案

是的,最后一行保证最终会执行[intro.progress]/18

An implementation should ensure that the last value (in modification order) assigned by an atomic or synchronization operation will become visible to all other threads in a finite period of time.



由于您的标志是原子的,并且也是任何线程以任何方式访问的唯一对象,因此这里没有数据争用。由于除了原子之外没有其他对象的加载或存储,因此程序无法依赖于这些不存在的加载或存储相对于原子的加载或存储的任何特定顺序。因此,轻松的存储顺序就足够了。由于可以保证线程1中的原子存储最终将对线程2可见,因此可以保证循环最终终止……

关于c++ - 我们如何强制变量共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59620948/

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