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个线程是否会等到初始化线程完成初始化?
非常感谢!
这是由标准的§6.7[stmt.dcl]/p4强制执行的:
如果控制在初始化变量时同时进入声明,则并发执行应等待初始化完成.
换句话说,是的.其他线程必须阻塞,直到初始化完成.
归档时间: |
|
查看次数: |
126 次 |
最近记录: |