美文网首页
单例模式

单例模式

作者: yshi2017 | 来源:发表于2018-06-19 13:32 被阅读0次

    -------------------------------------------最简单的单线程下的单例模式-------------------

    -----.h文件-----

    class SingletTon

    {

    public:

      ~SingletTon();

    public:

    static SingletTon *getInstance();      //  获取唯一实例的静态函数

    private:

      SingletTon();

    private:

      static SingletTon *m_pInstance;        //  本类的私有静态成员

    };

    -----CPP文件----

    SingletTon * SingletTon::m_pInstance = NULL;      //  本类的静态成员的初始化操作

    SingletTon * SingletTon::getInstance()

    {

        if (m_pInstance == NULL)

    {

        m_pInstance = new SingletTon();

    }

    return m_pInstance;

    }

    在多线程环境下时候,需要在代码中加锁。

    加锁后实现:

    SingletTon * SingletTon::getInstance()

    {

        lock();

        if (m_pInstance == NULL)

    {

        m_pInstance = new SingletTon();

    }

          unlock();

          return m_pInstance;

    }

    但是这样在线程数量多时候会出现阻塞问题:

    原因(每次判断实例为空时候都要被锁定,这样很多的线程都会在判空之前被锁定,造成阻塞)

    用双重锁定来解决:

    SingletTon * SingletTon::getInstance()

    {

      if (m_pInstance == NULL)

    {

      lock();

    if (m_pInstance == NULL)

    {

        m_pInstance = new SingletTon();

    }

        unlock();

    }

    return m_pInstance;

    }

    ------------------------------------------------------------------

    单例模式分为懒汉模式和饿汉模式

    懒汉:即不到万不得已不创建对象实例,也就是说在用到这个实例的时候才会取创建。

    饿汉 :饿了之后饥不择食,所以在定义的时候就进行创建。

    相关文章

      网友评论

          本文标题:单例模式

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