时间:2021-05-20
废话不多说,常用的代码积淀下来。
一、懒汉模式
即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety。
使用double-check来保证thread safety。但是如果处理大量数据时,该锁才成为严重的性能瓶颈。
1、静态成员实例的懒汉模式:
class Singleton{private:static Singleton* m_instance;Singleton(){}public:static Singleton* getInstance();};Singleton* Singleton::getInstance(){if(NULL == m_instance){Lock();//借用其它类来实现,如boostif(NULL == m_instance){m_instance = new Singleton;}UnLock();}return m_instance;}2、内部静态实例的懒汉模式
这里需要注意的是,C++0X以后,要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++ 0X以前,仍需要加锁。
class SingletonInside{private:SingletonInside(){}public:static SingletonInside* getInstance(){Lock(); // not needed after C++0xstatic SingletonInside instance;UnLock(); // not needed after C++0xreturn instance;}};二、饿汉模式:即无论是否调用该类的实例,在程序开始时就会产生一个该类的实例,并在以后仅返回此实例。
由静态初始化实例保证其线程安全性,WHY?因为静态实例初始化在程序开始时进入主函数之前就由主线程以单线程方式完成了初始化,不必担心多线程问题。
故在性能需求较高时,应使用这种模式,避免频繁的锁争夺。
class SingletonStatic{private:static const SingletonStatic* m_instance;SingletonStatic(){}public:static const SingletonStatic* getInstance(){return m_instance;}};//外部初始化 before invoke mainconst SingletonStatic* SingletonStatic::m_instance = new SingletonStatic;好了,线程单例模式就讲到这里,还希望对大家有所帮助!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
设计模式之单例模式C++实现一、经典实现(非线程安全)classSingleton{public:staticSingleton*getInstance();p
单例模式是最简单的设计模式之一。在实际工程中,如果一个类的对象重复持有资源的成本很高,且对外接口是线程安全的,我们往往倾向于将其以单例模式管理。此篇我们在C++
C++实现一个线程安全的单例工厂实现代码我们见到经常有人用static局部对象的方式实现了类似单例模式,最近发现一篇文章明确写明编译器在处理static局部变量
C++单例模式的详解及实例1.什么叫单例模式?单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全
Java多线程中的单例模式一、在多线程环境下创建单例方式一:packagecom.ietree.multithread.sync;publicclassSing