Muduo库源码分析(8):单例模式实现

来源:互联网 发布:ci框架打印sql语句 编辑:程序博客网 时间:2024/06/09 07:25
  • 单例模式
    保证一个类只有一个实例,并提供一个访问它的全局访问点
  • 参考资料
    C++设计模式——单例模式: http://www.jellythink.com/archives/82
  • Muduo库实现单例模式的思想:
    通过pthread_once在多个线程中只会初始化一次的特性实现的线程安全的单例模式
template<typename T>class Singleton : noncopyable{ public:  static T& instance()  {  //ponce_=PTHREAD_ONCE_INIT;所以该函数只会初始化一次init函数,哪个线程实现初始化取决于哪个线程先抢占CPU的执行权    pthread_once(&ponce_, &Singleton::init);    assert(value_ != NULL);    return *value_;  } private:  Singleton();  ~Singleton();  static void init()  {    value_ = new T();    if (!detail::has_no_destroy<T>::value)    {      ::atexit(destroy);    }  }  static void destroy()  {    typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];    T_must_be_complete_type dummy; (void) dummy;    delete value_;    value_ = NULL;  } private:  static pthread_once_t ponce_;// 条件变量  static T*             value_;// 单例对象};template<typename T>pthread_once_t Singleton<T>::ponce_ = PTHREAD_ONCE_INIT;template<typename T>T* Singleton<T>::value_ = NULL;}
原创粉丝点击