我一直在阅读有关线程安全单例的信息,我发现到处都有一个 getInstance() 方法,如下所示:
Singleton* getInstance()
{
if ( !initialized )
{
lock();
if ( !initialized )
{
instance = new Singleton();
initialized = true;
}
unlock();
}
return instance;
}
- 这实际上是线程安全的吗?
- 我是否遗漏了什么,或者这个函数有很小的机会返回一个未初始化的实例,因为“初始化”可能会在实例之前重新排序和设置?
这篇文章的主题略有不同,但最佳答案描述了为什么我认为上面的代码不是线程安全的: