zoukankan      html  css  js  c++  java
  • 线程安全的单例模式

    单例模式是为了保证一个类仅仅有一个实例并且易于外界訪问。所以一般仅仅有把构造函数,拷贝函数。析构函数,赋值函数。变量名变为私有。再用一个get函数訪问提供接口就可以。考虑线程安全就要加锁。

    一、懒汉模式:

    1、静态成员实例的懒汉模式:

    class Singleton
    {
    private:
        static Singleton* m_instance;
        Singleton(){}
    public:
        static Singleton* getInstance();
    };
    
    Singleton* Singleton::getInstance()
    {
        if(NULL == m_instance)
        {
            Lock();
            if(m_instance == NULL)
            {
                m_instance = new Singleton;
            }
            UnLock();
        }
        return m_instance;
    }

    2、内部静态实例的懒汉模式

    class SingletonInside
    {
    private:
        SingletonInside(){}
    public:
        static SingletonInside* getInstance()
        {
            Lock(); 
            static SingletonInside instance;
            UnLock(); 
            return instance; 
        }
    };

    二、饿汉模式

    静态实例初始化在程序開始时进入主函数之前就由主线程以单线程方式完毕了初始化,不必操心多线程问题。在性能需求较高时,应使用这样的模式,避免频繁的锁争夺。

    class SingletonStatic
    {
    private:
        static const SingletonStatic* m_instance;
        SingletonStatic(){}
    public:
        static const SingletonStatic* getInstance()
        {
            return m_instance;
        }
    };
    
    


  • 相关阅读:
    父组件和子组件之间的生命周期执行顺序
    Vue生命周期四个阶段
    Vue watch监听
    Vue computed计算属性 理解
    Vue中v-if 与 v-show的区别
    虚拟DOM
    MVC与MVVM原理
    单例模式 回流与重绘
    判断某个对象属于哪种数据类型
    原生JS的兼容性问题
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5248082.html
Copyright © 2011-2022 走看看