线程安全的单例模式

来源:互联网 发布:淘宝不中红包 编辑:程序博客网 时间:2024/05/16 02:12
把构造函数私有化,对外提供一个静态的成员函数获取对象实例,这是我们对单例模式的最简单印象,但是如果多线程同时获取对象实例的时候,我们首先想到的是加锁
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
原创粉丝点击