我知道根据C++03标准,函数作用域静态初始化不保证线程安全:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
随着C++0x标准最终提供了标准线程支持,函数范围内的静态初始化是否需要保证线程安全?
我知道根据C++03标准,函数作用域静态初始化不保证线程安全:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
随着C++0x标准最终提供了标准线程支持,函数范围内的静态初始化是否需要保证线程安全?
看起来初始化应该是线程安全的,因为如果对象在进入函数时动态初始化,则保证在关键部分执行:
4. ...第一次控制通过其声明初始化这样一个对象...如果控制同时进入声明而对象正在初始化,则并发执行必须等待初始化完成...
存在一个潜在的边缘情况,即在从 main() 返回后,静态对象的析构函数在静态局部已经销毁后调用该函数,行为是未定义的。但是,这应该很容易避免。