• 线程安全的单例模式


    单例模式是为了保证一个类仅仅有一个实例并且易于外界訪问。所以一般仅仅有把构造函数,拷贝函数。析构函数,赋值函数。变量名变为私有。再用一个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;
        }
    };
    
    


  • 相关阅读:
    在Xsheel Linux上安装nodejs和npm
    判断js中的数据类型的几种方法
    Sequelize 中文API文档-1. 快速入门、Sequelize类
    php中 ob_start()有什么作用
    PHP错误类型及屏蔽方法
    ajax对象的获取及其常用属性
    linux工作笔记
    Redis和Memcached的区别
    MySQL架构
    Http协议三次握手过程
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5248082.html
Copyright © 2020-2023  润新知