zoukankan      html  css  js  c++  java
  • 很好的设计-安全的单例模式

    在服务开发过程中,常常需要单例来保存全局资源,本文给出一个实用的实现方案。

    template<class T>
    class Singleton
    {
        public:
            static T* instance()
            {
                if (NULL == instance_)
                {
                    pthread_mutex_init(&mutex_, NULL);
                    pthread_mutex_lock(&mutex_);
                    if (NULL == instance_) {
                        instance_ = new T;
                    }
                    pthread_mutex_unlock(&mutex_);
                }   
                return instance_;
            }   
        protected:
            Singleton(){}
            virtual ~Singleton()
            {//虚析构函数,想想为啥呢?
                if (NULL != instance_)
                {
                    delete instance_;
                    instance_ = NULL;
                }
            }
            Singleton(const Singleton& single);//禁用拷贝和赋值函数
            Singleton& operator= (const Singleton& single);
    
    
        protected:
            static T* instance_;
            static pthread_mutex_t mutex_;
    };
    
    template<class T> T* Singleton<T>::instance_ = NULL;
    template<class T> pthread_mutex_t Singleton<T>::mutex_;
    

      

    使用:

    class WorkerPool : public Singleton<WorkerPool> {
    //methods & variables
    };
    WorkerPool* pool = WorkerPool::instance();
    

      

  • 相关阅读:
    如何做竞品分析报告
    软件架构入门
    系统内部矛盾的解决思路
    分表分库一
    Hbase随笔2
    Hbase随笔
    vertica在电信的应用
    理解RESTful架构
    百分点刘译璟
    数据产品的简介
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981997.html
Copyright © 2011-2022 走看看