首页 > 后端开发 > C++ > C 11 的局部静态变量初始化是线程安全的吗?

C 11 的局部静态变量初始化是线程安全的吗?

Mary-Kate Olsen
发布: 2025-01-03 15:22:41
原创
714 人浏览过

Is C  11's Local Static Variable Initialization Thread-Safe?

C 11 中局部静态变量初始化的线程安全

问题:

C 中11、是否保证像下面这样的局部静态变量的构造函数在a中只运行一次多线程上下文?

Logger& g_logger() {
    static Logger lg;
    return lg;
}
登录后复制

答案:

是的,lg 的构造函数保证只运行一次。

C 11标准(第 6.7 节)规定,局部静态变量在控制第一次通过其声明时被初始化,并且这样的初始化保证在任何初始化之前完成。可以继续并发执行。此外,还需要实现确保在初始化程序执行期间不会发生死锁。

因此,在 C 11 中,标准强制执行局部静态变量的线程安全初始化。

实现状态:

流行编译器的最新版本(包括 gcc 4.7、Visual C 2011 和 Clang 3.0)已经过验证,可以按照 C 11 标准正确实现局部静态变量的线程安全初始化。

以上是C 11 的局部静态变量初始化是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板