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

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

Linda Hamilton
Linda Hamilton原创
2024-12-25 06:45:10812浏览

Is C  11 Local Static Variable Initialization Guaranteed to be Thread-Safe?

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

C 中经常争论的一个问题是局部静态变量初始化的线程安全性,例如以下代码:

Logger& g_logger() {
    static Logger lg;
    return lg;
}

C 11 标准和线程安全性

在 C 11 标准中,此类初始化的行为已经最终确定,现在保证它是线程安全的。标准第 6.7 节规定“此类变量在控制第一次通过其声明时被初始化”,并且“并发执行应等待初始化完成”。此外,实现脚注澄清了“实现不得在初始化程序的执行周围引入任何死锁。”

编译器实现

主要编译器(gcc 4.7、vc 2011 和 clang 3.0)已正确实现修订后的线程安全要求。这意味着即使存在并发线程,lg 变量的构造函数也只会执行一次。

请注意,此保证仅适用于初始化本身。后续通过引用访问变量不一定是线程安全的。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn