繁体   English   中英

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

[英]C++0x static initializations and thread safety

我知道,从C ++ 03标准来看,函数范围静态初始化不保证是线程安全的:

void moo()
{
    static std::string cat("argent");  // not thread safe
    ...
}

最终提供标准线程支持的C ++ 0x标准,是否需要线程安全的函数范围静态初始化?

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

§6.7stmt.decl

4. ...这样的对象在第一次控制通过其声明时初始化...如果控件在初始化对象时同时进入声明,则并发执行应等待初始化完成...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM