本地静态变量初始化线程在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中,它们是否得到了适当的实现?