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

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

Susan Sarandon
发布: 2024-12-29 11:22:11
原创
495 人浏览过

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

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

问题:

C 中11、静态局部变量的构造函数(如下例中的构造函数)是否只运行一次,即使在多线程场景?

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

答案:

根据第 6.7 节中的 C 11 标准,静态局部变量在第一次控制传递时被初始化它的声明。此初始化必须在任何并发执行继续之前完成。此外,禁止该实现在初始化期间导致死锁。

编译器实现:

流行编译器的当前版本,包括 gcc 4.7、vc 2011 和 clang 3.0,正确实现这种线程安全行为。因此,您可以放心,局部静态变量只会初始化一次,保证多线程场景下的正确运行。

附加说明:

需要注意的是,虽然静态局部变量的初始化是线程安全的,但随后通过像 lg 这样的引用访问该变量可能不是线程安全的,除非采取额外的同步措施。已实施。

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

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