我们如何强制变量共享?

How do we force variable sharing?

本文关键字:共享 变量 何强制 我们      更新时间:2023-10-16

请考虑以下代码:

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

实现应确保原子或同步操作分配的最后一个值(按修改顺序(在有限的时间段内对所有其他线程可见。

由于您的标志是原子的,并且也是任何线程以任何方式访问的唯一内容,因此这里没有数据竞争。由于一开始没有对原子以外的对象进行加载或存储,因此程序不可能依赖于相对于原子的加载和存储的此类不存在的加载或存储的任何特定顺序。因此,宽松的内存顺序就足够了。由于保证线程 1 中的原子存储最终对线程 2 可见,因此保证循环最终终止...