美文网首页
C++简洁完美的单例模式实现

C++简洁完美的单例模式实现

作者: Jozhn | 来源:发表于2019-04-02 21:11 被阅读0次

完美的单例模式是线程安全的,使用懒汉模式。
Lock类用于加锁解锁,Singleton类为单例类。
不过还可能出现问题,因为CPU可能乱序执行,会出现未定义行为导致段错误:
假如线程A进入锁内并分配对象的空间,但是由于指令可能乱序,实际上导致local_instance被先指向一块未被分配的内存,然后再在这块内存上进程初始化。但是在指向后,未初始化前,另一线程B可能通过getInstance获取到这个指针。

#include <iostream>
#include <mutex>

using namespace std;

class Lock
{
    private:
        mutex mtx;
    public:
        void lock(){mtx.lock();}
        void unlock(){mtx.unlock();}
};

class Singleton
{
    private:
        Singleton(){};
        static Lock* locker;//静态锁对象指针
        static Singleton* instance;//静态单例对象指针
    public:
        static Singleton* getInstance()
        {
            if(!instance)
            {
                locker->lock();
                if(!instance)
                {
                    instance = new Singleton;
                }
                locker->unlock();
            }
            return instance;
        };
};

// 初始化锁
Lock* Singleton::locker = new Lock();
// 初始化单例
Singleton* Singleton::instance = 0;

int main()
{
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();
    cout << s1 << endl;
    cout << s2 << endl;

    return 0;
}

相关文章

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

  • C++简洁完美的单例模式实现

    完美的单例模式是线程安全的,使用懒汉模式。Lock类用于加锁解锁,Singleton类为单例类。不过还可能出现问题...

  • 学而时习之单例模式

    本文主要说明单例模式的概念,应用,以及C++实现。 I、上帝视角看单例模式 1.1 单例模式特点 单例模式需要满足...

  • Singleton 单例模式

    搬运自大神博客单例模式(Singleton)及其C++实现 单例模式,在GOF的《设计模式:可复用面向对象软件的基...

  • C++ 单例模式

    本文介绍C++单例模式的集中实现方式,以及利弊 局部静态变量方式 上述代码通过局部静态成员single实现单例类,...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • python面试题-2018.1.30

    问题:如何实现单例模式? 通过new方法来实现单例模式。 变体: 通过装饰器来实现单例模式 通过元类来创建单例模式...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • kotlin实现单例模式

    1.懒汉式实现单例模式 2.线程安全懒汉式实现单例模式 3.双重校验懒汉式实现单例模式 4.静态内部类方式实现单例模式

网友评论

      本文标题:C++简洁完美的单例模式实现

      本文链接:https://www.haomeiwen.com/subject/boenbqtx.html