关闭

线程安全的单例模式

标签: 多线程线程安全单例模式
225人阅读 评论(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网站的观点或立场