C++ C+中的线程安全单例+;
我一直在读线程安全的单例,我在everywhere找到的实现有一个getInstance()方法,类似这样:C++ C+中的线程安全单例+;,c++,multithreading,design-patterns,thread-safety,singleton,C++,Multithreading,Design Patterns,Thread Safety,Singleton,我一直在读线程安全的单例,我在everywhere找到的实现有一个getInstance()方法,类似这样: Singleton* getInstance() { if ( !initialized ) { lock(); if ( !initialized ) { instance = new Singleton(); initialized = true; }
Singleton* getInstance()
{
if ( !initialized )
{
lock();
if ( !initialized )
{
instance = new Singleton();
initialized = true;
}
unlock();
}
return instance;
}
- 这真的是线程安全的吗
- 我是否遗漏了什么,或者该函数返回未初始化实例的可能性很小,因为“initialized”可能会在实例之前重新排序和设置
这不是个好主意。寻找双重检查锁定。例如:
这不是个好主意。寻找双重检查锁定。例如:
它确实不是线程安全的,因为指针返回后,您仍然可以使用它,尽管互斥锁再次被解锁
您可以做的是使继承自singleton的子类成为线程安全的。然后就可以开始了。它确实不是线程安全的,因为指针返回后,您仍然可以使用它,尽管互斥锁再次被解锁
您可以做的是使继承自singleton的子类成为线程安全的。那你就可以走了。不,这不是线程安全的。如果你使用单例,你会得到你想要的,真的。或者简言之,不是你错过了什么,而是你错过了代码的作者。但是,我想知道,在赋值实例和初始化赋值之间是否存在内存障碍会影响问题(假设初始化为类型<代码>易失性SiguAuthiCixt < /代码>)。考虑复习:记忆障碍也是我的想法。不,它不是线程安全的。如果你使用单例,你会得到你想要的,真的。或者简言之,不是你错过了什么,而是你错过了代码的作者。但是,我想知道,在实例赋值和初始化赋值之间是否存在内存障碍会影响问题(假设初始化为类型<代码>易失性SiguAuthiCixt < /代码>)。考虑复习:记忆障碍也是我的想法。两个优秀的程序员。谢谢你发布这些。两篇优秀的文章。谢谢你发布这些。