如果BOOL仅从false到true一次,我可以避免锁定布尔
Can I avoid locking a bool if it only goes from false to true once?
i有一个由多个线程访问的bool
,但是在程序的运行时,该值只能从false
转换为CC_2。只要值最终为 true
,我不在乎每个线程都会立即对变量的视图立即保持一致的视图 - 只要它们最终都捡起它。
不幸的是,检查该值的值很频繁,因此锁定值很昂贵。
我已经看过其他人谈论缓存的帖子可能无法正确刷新,但是 exkerceck 不锁定读数的副作用是什么?
?谢谢!
确切的副作用是未定义的行为。
使用常规的bool
,编译器不知道它将以多个线程访问,因此可能会应用导致不确定行为的优化(例如其他线程不可见的更新(。
用std::atomic<bool>
替换bool
,将其完全像使用bool
一样使用,并且很好。无需锁定。
使用原子。它比任何锁都便宜,可以通过一致性解决您的问题。
另一种方法:不要多次检查您的变量。通知可变更改的每个线程。
相关文章:
- C++方法实现:是否可以避免每次都键入类名?
- 是否可以避免在以下代码中复制/移动构造函数的需要?
- 我可以避免通过time_t打印时间点吗
- 有什么技巧可以避免在模板类中使用"typename"关键字吗
- 在这种情况下,有什么正确的方法可以实现锁定吗?
- 在这种情况下,我可以避免使用带有主体的纯虚函数吗?
- 是否可以避免将参数复制到 lambda 函数?
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 如果BOOL仅从false到true一次,我可以避免锁定布尔
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- 在这种情况下是否可以避免使用虚拟方法调用?
- 是否可以避免在前向声明中使用嵌套命名空间?
- 使用GCOV时,是否有一种方法可以避免使用CPP文件中包含的标头文件进行仪器
- 是否可以避免 for 循环来计算矩阵条目
- 在Thrift中,有没有一种方法可以避免生成C++setter
- 我可以在锁定文件后复制文件吗?
- 我可以避免在std ::变体中明确编写每个结构的构造函数
- 是否可以避免使用lambda中的尾随返回型语法
- 在GPU上调用函数时,我可以避免__device__限定符吗
- 我是否可以避免由特定类定义的限定名称