为了账号安全,请及时绑定邮箱和手机立即绑定

本地静态变量初始化线程在C+11中是否安全?

本地静态变量初始化线程在C+11中是否安全?

C++
大话西游666 2019-06-21 17:32:38
本地静态变量初始化线程在C+11中是否安全?我知道这是一个经常被问到的问题,但由于有这么多的变体,我想重新声明它,并希望有一个反映当前状态的答案。有点像Logger& g_logger() {     static Logger lg;     return lg;}变量lg的构造函数是否保证只运行一次?我从以前的答案中知道,在C+03中,这不是;在C+0x草案中,这是强制的。但我想要一个更清晰的答案在C+11标准(非草案)中,线程安全初始化行为是否已经完成?如果以上是肯定的,那么在当前流行编译器的最新版本,即GCC 4.7、vc 2011和clang 3.0中,它们是否得到了适当的实现?
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

有关的第6.7节:

此类变量在控件第一次通过其声明时被初始化;该变量在初始化完成后被视为初始化。[.]如果在初始化变量时控件同时输入声明,则并发执行应等待初始化完成。

还有一个脚注:

实现不能在初始化器的执行过程中引入任何死锁。

所以是的,你很安全。

(当然,这与随后通过引用访问变量无关。)


查看完整回答
反对 回复 2019-06-21
?
智慧大石

TA贡献1946条经验 获得超3个赞

-FNO-线程安全静力学也值得一提.GCC:

不要发出额外的代码来使用C+ABI中指定的例程来进行本地静力学的线程安全初始化。您可以使用此选项在不需要线程安全的代码中稍微减少代码大小。

另外,看看这条旧线。GCC的函数静态变量线程安全吗?


查看完整回答
反对 回复 2019-06-21
  • 2 回答
  • 0 关注
  • 612 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信