我知道在 C++03 标准中,函数范围的静态初始化不保证是线程安全的:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
随着 C++0x 标准最终提供标准线程支持,函数范围的静态初始化是否需要线程安全?
最佳答案
似乎初始化是线程安全的,因为在进入函数时动态初始化对象的情况下,它保证在临界区执行:
4。 ...这样的对象在控件第一次通过其声明时被初始化...如果控件在初始化对象时并发进入声明,则并发执行应等待初始化完成.../p>
有一个潜在的边缘情况,如果从 main() 返回后,静态对象的析构函数在静态本地已经销毁后调用该函数,则行为未定义。然而,这应该很容易避免。
关于C++0x 静态初始化和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987679/