Nav*_*een 6 c++ static-members thread-safety
我有以下示例C++代码:
class Factory
{
public:
static Factory& createInstance()
{
static Factory fac;
return fac;
}
private:
Factory()
{
//Does something non-trivial
}
};
Run Code Online (Sandbox Code Playgroud)
让我们假设createInstance两个线程同时调用它.那么生成的对象是否会正确创建?如果第二个线程createInstance在第一个线程位于构造函数中时进入调用会发生什么Factory?
C++ 11及更高版本:本地静态创建是线程安全的.
该标准保证:
它通常用双重检查实现:
C++ 03和C++ 98:标准没有线程.
就标准而言,没有线程,因此标准中没有关于跨线程同步的规定.
然而,一些编译器实现更比标准规定,无论是在扩展的形式或通过给予更有力的保护,因此,请检查您感兴趣的编译器.如果他们是那些质量好,有机会,他们就会保证.
最后,它可能没有必要是线程安全的.如果在创建任何线程之前调用此方法,那么您可以确保在真正的多线程发挥作用之前将其正确初始化,并且您可以巧妙地解决问题.
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |