关闭

线程安全的单例模式

标签: 多线程线程安全单例模式
195人阅读 评论(0) 收藏 举报
分类:
把构造函数私有化,对外提供一个静态的成员函数获取对象实例,这是我们对单例模式的最简单印象,但是如果多线程同时获取对象实例的时候,我们首先想到的是加锁
class Singleton  
{  
private:  
    static Singleton* m_instance;  
    Singleton(){}  
public:  
    static Singleton* getInstance();  
};  
    
Singleton* Singleton::getInstance()  
{  
    if(NULL == m_instance)  
    {  
        Lock();
        if(NULL == m_instance)  
        {  
            m_instance = new Singleton;  
        }  
        UnLock();  
    }  
    return m_instance;  
}

加锁其实很影响效率,可以换个方式实现

class SingletonStatic  
{  
private:  
    static const SingletonStatic* m_instance;  
    SingletonStatic(){}  
public:  
    static SingletonStatic* getInstance()  
   {  
        return m_instance;  
   }  
};  
  
//外部初始化
const SingletonStatic* SingletonStatic::m_instance = new SingletonStatic;  
利用全局变量在程序最开始就会被创建的原理,new SingletonStatic就会在多线程获取之前就被创建了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21902次
    • 积分:667
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:0篇
    • 译文:0篇
    • 评论:29条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类