废话不多说,常用的代码积淀下来。
<强>一、懒汉模式强>
即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的如果语句,从而非线程安全。
使用仔细检查来保证线程安全。但是如果处理大量数据时,该锁才成为严重的性能瓶颈。
<强> 1,静态成员实例的懒汉模式:强>
单例类 { 私人: 静态单例* m_instance; 单例(){} 公众: 静态单例* getInstance (); }; 单例*单:getInstance () { 如果(NULL==m_instance) { 锁();//借用其它类来实现,如提升 如果(NULL==m_instance) { m_instance=新单; } 解锁(); } 返回m_instance; }
<强> 2,内部静态实例的懒汉模式强>
这里需要注意的是,c++ 0 x以后,要求编译器保证内部静态变量的线程安全性,可以不加锁,但c++ 0 x以前,仍需要加锁。
类SingletonInside { 私人: SingletonInside () {} 公众: 静态SingletonInside * getInstance () { 锁();//c++ 0 x后不需要 静态SingletonInside实例; 解锁();//c++ 0 x后不需要 返回实例; }};
<强>二,饿汉模式:强>即无论是否调用该类的实例,在程序开始时就会产生一个该类的实例,并在以后仅返回此实例。
由静态初始化实例保证其线程安全性,为什么?因为静态实例初始化在程序开始时进入主函数之前就由主线程以单线程方式完成了初始化,不必担心多线程问题。
故在性能需求较高时,应使用这种模式,避免频繁的锁争夺。
类SingletonStatic { 私人: 静态常量SingletonStatic * m_instance; SingletonStatic () {} 公众: 静态常量SingletonStatic * getInstance () { 返回m_instance; } };//外部初始化之前调用主要 const SingletonStatic * SingletonStatic:: m_instance=新SingletonStatic;
好了,线程单例模式就讲到这里,还希望对大家有所帮助!
<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接