在C ++ 11中同步的静态变量初始化?

时间:2014-05-11 14:27:18

标签: c++ multithreading c++11 static initialization

在以下情形中:

HeavyInitClass* f()
{
    static HeavyInitClass* heavy = new HeavyInitClass();
    return heavy;
}

我知道在C ++ 11中,在多线程环境中将重新初始化一次,因为标记该重的未标记的标志是线程安全的。

但它是否也会阻塞线程,直到重载已经被初始化? 如果100个线程同时调用f(),那么99个其他线程是否会等到初始化线程完成初始化?

非常感谢!

1 个答案:

答案 0 :(得分:5)

这是由标准的§6.7[stmt.dcl] / p4强制执行的:

  

如果控件在初始化变量时同时进入声明,则并发执行应等待初始化完成。

换句话说,是的。其他线程必须阻塞,直到初始化完成。