如果BOOL仅从false到true一次,我可以避免锁定布尔

Can I avoid locking a bool if it only goes from false to true once?

本文关键字:可以避免 锁定 布尔 一次 true BOOL 仅从 false 如果      更新时间:2023-10-16

i有一个由多个线程访问的bool,但是在程序的运行时,该值只能从false转换为CC_2。只要值最终为 true,我不在乎每个线程都会立即对变量的视图立即保持一致的视图 - 只要它们最终都捡起它。

不幸的是,检查该值的值很频繁,因此锁定值很昂贵。

我已经看过其他人谈论缓存的帖子可能无法正确刷新,但是 exkerceck 不锁定读数的副作用是什么?

谢谢!

确切的副作用是未定义的行为。
使用常规的bool,编译器不知道它将以多个线程访问,因此可能会应用导致不确定行为的优化(例如其他线程不可见的更新(。

std::atomic<bool>替换bool,将其完全像使用bool一样使用,并且很好。无需锁定。

使用原子。它比任何锁都便宜,可以通过一致性解决您的问题。

另一种方法:不要多次检查您的变量。通知可变更改的每个线程。