我一直在寻找SO和MSDN的答案来回答这个问题,但似乎无法找到明确的最终答案......
我知道它是在C++ 11标准中并且当前的GCC版本就是这样的,但VC2010目前是否保证了本地静态变量初始化的线程安全性?
即:这对VC2010有线程安全吗?
static S& getInstance()
{
static S instance;
return instance;
}
Run Code Online (Sandbox Code Playgroud)
...如果没有,目前使用VC2010在C++中获得线程安全的单例实现的最佳实践是什么?
编辑:正如Chris Betti的回答所指出的,VC2010没有实现本地静态变量init的线程安全性.
我们知道局部静态变量初始化在 C++11 中是线程安全的,现代编译器完全支持这一点。(在 C++11 中局部静态变量初始化线程安全吗?)
使其线程安全的成本是多少?我知道这很可能依赖于编译器实现。
上下文:我有一个多线程应用程序(10 个线程)通过以下函数以非常高的速率访问单例对象池实例,我担心它的性能影响。
template <class T>
ObjectPool<T>* ObjectPool<T>::GetInst()
{
static ObjectPool<T> instance;
return &instance;
}
Run Code Online (Sandbox Code Playgroud)