c++ - 确保静态布尔检查的线程安全
问题描述
我的代码中出现多次的一个模式是需要调用某个初始化函数的函数,目前解决如下
void doSomething(){
static bool _isInitialized = false;
if( ! _isInitialized ){
initializationFunction();
_isInitialized = true;
}
...
}
然而,据我所知,这种函数不是线程安全的,因为在设置为 trueinitializationFunction
之前,可能会发生一个线程正在执行而另一个线程开始执行相同的操作。_isInitialized
我是编写多线程代码的新手,我想知道什么是使此类代码线程安全的好方法。一种可能的解决方案似乎是对该代码加锁,但我宁愿避免使用锁。还有另一种(更好的)方法来解决这个问题吗?
解决方案
假设签名由initializationFunction
某个第三方决定(如评论中所建议),那么您可以执行类似...
void doSomething ()
{
static bool _isInitialized =
[]()
{
initializationFunction();
return true;
}();
}
推荐阅读
- c++ - 文件系统错误:无法复制:文件存在
- reactjs - 如何解决此错误无法解构“this.props.form”的属性“getFieldDecorator”,因为它未定义
- javascript - Angular 如何在这个 *ngFor 中使用 ngbRadioGroup?
- html - 无法在 CSS 中使用网格使元素居中
- python - 使用列表值对字典中的各个键执行特定操作
- vue.js - 将数据从自定义指令传递到组件
- flutter - 在颤动中单击后更改图标
- angular - 如何从一个类创建一个映射,以便将其属性提取为值?
- php - 如何使用 PHP 在每三个元素之后显示一个项目
- php - php 中的 file_get_contents 返回空字符串