本地静态变量初始化线程在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个赞
此类变量在控件第一次通过其声明时被初始化;该变量在初始化完成后被视为初始化。[.]如果在初始化变量时控件同时输入声明,则并发执行应等待初始化完成。
实现不能在初始化器的执行过程中引入任何死锁。
智慧大石
TA贡献1946条经验 获得超3个赞
不要发出额外的代码来使用C+ABI中指定的例程来进行本地静力学的线程安全初始化。您可以使用此选项在不需要线程安全的代码中稍微减少代码大小。
- 2 回答
- 0 关注
- 612 浏览
添加回答
举报
0/150
提交
取消