c++ 单例模式

class CSingleton  
{  
private:  
    CSingleton()   //构造函数是私有的  
    {  
    }  
    static CSingleton *m_pInstance;  
public:  
    static CSingleton * GetInstance()  
    {  
        if(m_pInstance == NULL)  //判断是否第一次调用  
            m_pInstance = new CSingleton();  
        return m_pInstance;  
    }  
};  

链接

为什么要用double checking

之前在使用Double Check Locking 模式时,发现自己还是不太理解。于是写个记录,其实很简单,一看就明白了。
应用特别说明:
1.Double Check Locking模式是singleton的多线程版本,如果是单线程则应使用singleton。
2.Double Check Locking模式依就会使用锁——临界区锁定,不要以为可以避免使用锁。
3.Double Check Locking 解决的问题是:当多个线程存在访问临界区企图时,保证了临界区只需要访问一次。
下面是其适用特点:
1.多个线程试图并发访问一个临界区;
2.临界区只需执行一次;
分析如下3种方法:
//class singleton
//:s1-
singleton* get_instance(void)
{
lock();
if( instance == 0) {
instance = new singleton;
}
unlock();
return instance;
}
*存在的问题是:无论是否已经初始化都要加锁,增加了负荷,已经没有所谓的并发性能了。
//:s-2
singleton
get_instance(void)
{
if( instance == 0){
lock();
instance = new singleton;
unlock();
}
return instance;
}
*存在的问题是:不能保证临界区只初始化一次,没能实现singleton的基本功能;
//:s-3
singleton
get_instance(void)
{
if( instance == 0){
lock();
if( instance == 0 )
instance = new singleton;
unlock();
}
return instance;
}
**解决路上述问题——双检锁模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在之前 这篇文章应该是写在两年前,一直在自己的one note里面。当时为了练习英文写作就全篇用英语写的。主要内...
    HughLuo阅读 3,751评论 1 0
  • 简介 单例指的是只能存在一个实例的类(在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它...
    能不能写满三篇阅读 14,248评论 3 24
  • 单例对象实现方法: 注解: static Singleton *_instance = nil这里使用静态变量是为...
    Zentopia阅读 3,928评论 0 1
  • 单例模式出现以后,关于它的争执就一直存在。在开发项目中,有很多时候我们需要一个全局的对象,而且要保证全局有且仅有一...
    蒲公英少年带我飞阅读 12,601评论 0 25
  • 有人这样说,每一首喜欢的音乐,不是喜欢它的节奏,不是喜欢歌手的嗓音,是喜欢歌中的故事…… 喜欢一首民谣,不是喜欢它...
    槿蓁阅读 1,571评论 0 0

友情链接更多精彩内容