gpt4 book ai didi

c++ - C++11中的局部静态变量初始化线程安全吗?

转载 作者:IT老高 更新时间:2023-10-28 11:27:57 26 4
gpt4 key购买 nike

我知道这是一个经常被问到的问题,但由于有很多变体,我想重新陈述它,并希望有一个反射(reflect)当前状态的答案。类似的东西

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

变量lg的构造函数是否保证只运行一次?

我从以前的答案中知道,在 C++03 中,这不是;在 C++0x 草案中,这是强制执行的。但我想要一个更清晰的答案

  1. 在 C++11 标准(非草稿)中,线程安全的初始化行为是否最终确定?
  2. 如果以上是肯定的,在当前最新版本的流行编译器中,即 gcc 4.7、vc 2011 和 clang 3.0,它们是否正确实现?

最佳答案

相关第6.7节:

such a variable is initialized the first time control passes through its declaration; such a variable is considered initialized upon the completion of its initialization. [...] If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.

然后是一个脚注:

The implementation must not introduce any deadlock around execution of the initializer.

所以是的,你很安全。

(这当然没有说明后续通过引用访问变量。)

关于c++ - C++11中的局部静态变量初始化线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com