• c++单例模式线程安全几种实现方式


        c++编程中,单例模式经常用到,单例模式有懒汉模式和饿汉模式两种。

        懒汉模式直接采用静态变量,但是占用内存。

        饿汉模式,根据需要动态生成,但是多个线程同时调用,存在线程安全问题。

        下面主要总结饿汉模式中几种线程安全写法:

        1.使用静态互斥量

         

    #include

    class SingleModeSecure 
    {
    public:
        ~SingleModeSecure() {}
        
        static SingleModeSecure* Instance(void)
        {
            static SingleModeSecure* pSingleModeSecure = nullptr;
            static std::mutex  sMutex;

            if (!pSingleModeSecure)
            {
                std::lock_guard lock(sMutex);
                if (nullptr == pSingleModeSecure)
                {
                    pSingleModeSecure = new SingleModeSecure();
                }
            }
            
            return pSingleModeSecure;
        }

    protected:

    private:
        SingleModeSecure() { }

    };

    2.使用std::call_once创建单例模式

    class SingleModeSecure2
    {
    public:
        ~SingleModeSecure2() {}
        
        static SingleModeSecure2* Instance(void)
        {
            static SingleModeSecure2* pSingleModeSecure2 = nullptr;
            static std::once_flag one_flag;
            std::call_once(one_flag, []() {        
                           std::cout << "call once" << std::endl;
                           pSingleModeSecure2 = new SingleModeSecure2(); });
            return pSingleModeSecure2;
        }

        void Out(void) {}
        //
        
    protected:

    private:
        SingleModeSecure2() { }    
    };

  • 相关阅读:
    【无标题】
    解压apk后各文件夹含义
    SourceTree 这是一个无效的源路径/URL
    机器学习技术栈—— 概率学基础
    广度优先搜索(BFS)
    【MTU】Windows/Linux下修改MTU
    Redis的数据删除策略
    JVM 双亲委派模型
    云上有AI,让地球科学研究更省力
    统信UOS桌面操作系统安装教程
  • 原文地址:https://blog.csdn.net/face_to/article/details/126604377