C 0x静态初始化和线程安全

前端之家收集整理的这篇文章主要介绍了C 0x静态初始化和线程安全前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道,从C 03标准来看,功能范围静态初始化不能保证线程安全:
void moo()
{
    static std::string cat("argent");  // not thread safe
    ...
}

使用C 0x标准终于提供标准线程支持,是要求线程安全的函数范围静态初始化吗?

解决方法

似乎初始化将是线程安全的,因为在进入函数时对象被动态初始化的情况下,它保证在关键部分执行:

§ 6.7 stmt.decl

…这样一个对象被初始化,第一次控制通过它的声明…如果控件在对象被初始化时同时进入声明,则并发执行将等待完成初始化…

有一个潜在的边缘情况,如果从main()返回后,静态对象的析构函数在static local已经被破坏后调用函数,行为是未定义的.但是,应该很容易避免.

猜你在找的C&C++相关文章