我一直在阅读关于线程安全的单例,我发现在各处都有一个getInstance()方法的实现:
Singleton* getInstance()
{
if ( !initialized )
{
lock();
if ( !initialized )
{
instance = new Singleton();
initialized = true;
}
unlock();
}
return instance;
}
这篇文章略有不同,但最重要的答案描述了为什么我认为上面的代码不是线程安全的:
Why is volatile not considered useful in multithreaded C or C++ programming?
答案 0 :(得分:4)
不是个好主意。寻找双重检查锁定。例如:
http://www.drdobbs.com/cpp/c-and-the-perils-of-double-checked-locki/184405726
http://www.drdobbs.com/cpp/c-and-the-perils-of-double-checked-locki/184405772
答案 1 :(得分:0)
它确实不是线程安全的,因为在指针返回后你仍然使用它,尽管互斥锁再次被解锁。
你可以做的是使子类继承自单例,线程安全。然后你很高兴。