我知道,从C ++ 03标准开始,函数范围静态初始化不保证是线程安全的:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
最终提供标准线程支持的C ++ 0x标准,是否需要线程安全的函数范围静态初始化?
答案 0 :(得分:9)
初始化似乎是线程安全的,因为在进入函数时对象是动态初始化的,它保证在关键部分执行:
4。 ...这样的对象在控件第一次通过其声明时初始化...如果控件在初始化对象时同时进入声明,则并发执行应等待初始化完成... < / p>
有一个潜在的边缘情况,如果从main()返回后,静态对象的析构函数在静态local已经被破坏后调用该函数,则行为是未定义的。但是,这应该很容易避免。