码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-03-14 18:03:10      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:str   带来   public   return   访问   get   static   机制   单例模式   

1.概念

1)单例模式就是一个类只能被实例化一次 ,更准确的说是只能有一个实例化对象的类

2)为什么要有单例模式:一则,解决多线程并发访问的问题;二则节约系统资源

  • 例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的打印任务
  • 如在Windows中就只能打开一个任务管理器,如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态

3)

2.实现代码

class CSingleton {    //懒汉模式
private:
    CSingleton()//把构造函数设为private,不让外界直接生成实例
    {
        pthread_mutex_init(&mtx, 0);
    }
    static CSingleton* p;
public:
    static pthread_mutex_t mtx;
    static CSingleton* getInstance()//外界通过调用这个public函数去获得实例
    {
        if (p == NULL)//只实例化一次
        {
            pthread_mutex_lock(&mtx); //如果两个线程同时获取实例化对象,这样就会造出两个实例了,所以要加锁
            p = new CSingleton();
            pthread_mutex_unlock(&mtx);
        }
        else
            return p;
    }
};
pthread_mutex_t CSingleton::mtx;
CSingleton* CSingleton::p = NULL;



class CSingleton {    //饿汉模式,不用加锁
private:
    CSingleton(){}
    static CSingleton *p;
public:
    static CSingleton* getInstance()
    {
        return p;
    }
};
CSingleton* CSingleton::p = new CSingleton();//在外界会调用 CSingleton::getInstance()之前这个类就已经被实例化了,所以不会出现多线程的安全问题

 

单例模式

标签:str   带来   public   return   访问   get   static   机制   单例模式   

原文地址:https://www.cnblogs.com/Joezzz/p/10531912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!