我们如何强制变量共享?
How do we force variable sharing?
请考虑以下代码:
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 可见,因此保证循环最终终止...
相关文章:
- C++子类共享变量?
- 子目录之间的 CMAKE 共享变量
- 如何在不同的CMakeList.txt之间共享变量?
- OpenMP 任务看不到共享变量的更改
- OpenMP:当我按线程 ID 访问共享变量时,我是否需要一个关键部分
- 多个 OpenMP 线程读取(而不是写入)共享变量的性能成本?
- 在 pthread 中使用共享变量
- 提升线程问题,当一个线程与另一个线程没有相同的副本时如何共享变量?
- C :与多个文件共享变量
- 使用共享变量进行线程处理
- 是否要确保一个线程修改的任何数据类型的共享变量对其他线程可见
- 在派生类之间复制共享变量(浅副本就足够了)
- 为什么跨线程更改共享变量的代码显然没有受到竞争条件的影响
- 从多个线程C 更改共享变量
- 在不同类的对象之间共享变量 (C++)
- 管理多线程应用程序中的共享变量
- C 类共享变量
- 增强多线程和共享变量
- 共享变量和局部变量C++
- 对共享变量的无保护访问是否总是数据竞赛