在以下情形中:
HeavyInitClass* f()
{
static HeavyInitClass* heavy = new HeavyInitClass();
return heavy;
}
我知道在C ++ 11中,在多线程环境中将重新初始化一次,因为标记该重的未标记的标志是线程安全的。
但它是否也会阻塞线程,直到重载已经被初始化? 如果100个线程同时调用f(),那么99个其他线程是否会等到初始化线程完成初始化?
非常感谢!
答案 0 :(得分:5)
这是由标准的§6.7[stmt.dcl] / p4强制执行的:
如果控件在初始化变量时同时进入声明,则并发执行应等待初始化完成。
换句话说,是的。其他线程必须阻塞,直到初始化完成。