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

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

Susan Sarandon
Susan Sarandon原创
2024-12-29 11:22:11534浏览

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中文网其他相关文章!

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