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

TCS*_*TCS 2 c++ static multithreading initialization c++11

在以下场景中:

HeavyInitClass* f()
{
    static HeavyInitClass* heavy = new HeavyInitClass();
    return heavy;
}
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢!

T.C*_*.C. 5

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

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

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