美文网首页
C++中线程安全的单例模式(2)

C++中线程安全的单例模式(2)

作者: Kai_Z | 来源:发表于2019-01-01 17:34 被阅读5次

简介

本文介绍单例模式实现的另外两种方法:

  • 通过double check(借助std::atomic)实现单例模式
  • 采用static member实现单例模式

double check实现单例模式

在使用double check来实现线程安全的单例模式中,我们需要使用std::atomic
来实现必要的同步。

class SingleTon {
public:
    static SingleTon* getInstance(void)
    {
        if(s_p.load() == nullptr){
            std::lock_gurad<std::mutex> lk(s_mtx);
            if(s_p.load() == nullptr){
                auto p = new SingleTon();
                s_p.store(p);
            }
        }
        return s_p.load();
    }
public:
    int getValue() {
        return m_int;
    }
private:
    static std::mutex s_mtx;
    static std::atomic<SingleTon*> s_p;
    SingleTon(SingleTon&) = delete;
    SingleTon& operator=(SingleTon&) = delete;
    SingleTon(SingleTon&&) = delete;
    SingleTon& operator=(SingleTon&&) = delete;
    SingleTon() {
        m_int = 0;
    }
private:
    int m_int;
};

借助static member实现单例模式

在c++11中,c++标准开始支持多线程模式,函数内部的静态成员变量的初始化为线程安全的,
这也很大的简化了单例模式的实现方始。

class SingleTon {
public:
    static SingleTon& getInstance(void)
    {
        static SingleTon s_singleTon(); //采用静态成员变量
        return s_singleTon;
    }
public:
    int getValue() {
        return m_int;
    }
private:
    SingleTon(SingleTon&) = delete;
    SingleTon& operator=(SingleTon&) = delete;
    SingleTon(SingleTon&&) = delete;
    SingleTon& operator=(SingleTon&&) = delete;
    SingleTon() {
        m_int = 0;
    }
private:
    int m_int;
};

相关文章

  • C++单例模式实现(线程安全&支持多参数构造)

    C++单例模式实现(线程安全&支持多参数构造) 线程安全版本 支持多参数版本的单例类 遇到问题点: std::ca...

  • C++单例模式实现(线程安全&支持多参数构造)

    C++单例模式实现(线程安全&支持多参数构造) 线程安全版本 支持多参数版本的单例类 遇到问题点: std::ca...

  • Kotlin 的单例模式

    Kotlin 的单例模式 1. 在 Java 中的单例模式 懒汉式单例模式,并且是线程安全 2. 在 Kotlin...

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • Java 常用单例

    一、线程不安全的单例模式 二、线程安全且高效的单例模式 1.双重校验锁 2.静态内部类

  • Java 单例模式

    概述 Java中单例模式是一种常见的设计模式,单例模式总共有7种写法。 懒汉,线程不安全 懒汉,线程安全 饿汉 饿...

  • Java设计模式一--单例模式

    一、单例模式单例模式主要分为饿汉式、懒汉式(非线程安全、线程安全、双重检查)、静态内部类、枚举。1.饿汉式 2.懒...

  • 设计模式 ~ 单例模式

    七种常见的单例模式 1、懒汉式 特点:获取单例时判空即可,线程不安全 2、线程安全的懒汉式 特点:在获取单例的方法...

  • 设计模式(2) 单例模式

    单例模式 线程安全的Singleton 会破坏Singleton的情况 线程级Singleton 单例模式是几个创...

  • Java 单例模式

    线程安全的单例模式的几种实现方法分享线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅 饿汉式 借助内部类...

网友评论

      本文标题:C++中线程安全的单例模式(2)

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