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;
        }
    };
    
    


  • 相关阅读:
    linux如何用yum进行部署xampp环境
    jmeter关联案例的几种方法
    jmeter中元件
    CentOS7在VMware下设置成桥接模式
    CentOS7使用vsftpd搭建ftp
    虚拟机WMware15和CnetOS7安装
    MySql忘记密码的解决方案
    Windows下MySql8解压版的安装与完全卸载
    Idea设置统一为utf-8编码格式
    Idea常用快捷键
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5248082.html
Copyright © 2011-2022 走看看