• 单例模式


    单例模式含义】
    单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。 单例模式 只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等
    单例模式实现方式(双重锁机制)
            1.生成对象的接口屏蔽 //构造函数  拷贝构造函数
            2.类中提供一个接口来生成唯一的对象  
                    1.返回值  类对象的指针或者引用
                    2.接口是静态 
    
    
       单线程中
    Singleton* getInstance()
    {
        if (instance == NULL)
        instance = new Singleton();
     
        return instance;
    }
    这样就可以了,保证只取得了一个实例。但是在多线程的环境下因为很可能两个线程同时运行到if (instance == NULL)导致可能会产生两个实例。于是就要在代码中加锁。
     
    Singleton* getInstance() { lock(); if (instance == NULL) { instance = new Singleton(); } unlock(); return instance; }
    但这样写的话,因为每次判断是否为空都需要被锁定,如果有很多线程的话,就爱会造成大量线程的阻塞。于是大神们又想出了双重锁定。
    Singleton* getInstance()
    {
        if (instance == NULL)
        {
            lock();
            if (instance == NULL)
            {
                    instance = new Singleton();
            }
            unlock();
        }
    
        return instance;
    }
    
    这样就确保不会重复创建了。两个锁确定了只有一个可以运行
    class Singleton
    {
    public:
           static Singleton* getInstance()
      {
                    if (psing == NULL)
                   {
                            psing = new Singleton();
             }
                    return psing;
        }
    private:
         Singleton(){}
        Singleton(const Singleton&);
         static Singleton* psing;
    };
    Singleton* Singleton::psing = NULL;
    int main()
    {
         Singleton* ps1 = Singleton::getInstance();
           Singleton* ps2 = Singleton::getInstance();
           Singleton* ps3 = Singleton::getInstance();
           Singleton* ps4 = Singleton::getInstance();
           return 0;
    }
  • 相关阅读:
    QT5.4 vs2013静态加载插件的sqlite静态编译
    四个漂亮的CSS样式表
    程序猿写的程序将如何打包成安装包(最简单)
    cocos2d的-X- luaproject的LUA脚本加密
    【【分享】深入浅出WPF全系列教程及源码 】
    C#的StringBuilder 以及string字符串拼接的效率对照
    【Android中Broadcast Receiver组件具体解释 】
    【蜗牛—漫漫IT路之大学篇(九) 】
    【分布式存储系统sheepdog 】
    C#异步调用
  • 原文地址:https://www.cnblogs.com/xcb-1024day/p/11190843.html
Copyright © 2020-2023  润新知