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