学习如何用 C++ 写一个线程安全的单例模式

参考书籍:《C++ 设计模式》李阳阳

cpp 复制代码
#pragma once
#inlcude <iostream>
using namespace std;
#include <mutex>

struct lugard_sync {
    explicit lugard_sync(std::mutex &_mutex) : m_mutex(_mutex) {
        m_mutex.lock();
    }
	
	~lugard_sync() { m_mutex.unlock(); }

private:
    std::mutex &m_mutex;
}

class Monitor {
private: 
    // 注意点 1:单例类的构造函数是私有的,这样能够保证
    //           外部类无法调用该构造函数来生成多个实例
    Monitor() {}
    
    // 注意点 2:为避免类在外部实例化,该类自身必须定义
    //           一个静态私有实例
    static Monitor *instance;

public:
    // 注意点 3:向外提供一个静态的公有函数,用于创建或
    //           获取该静态私有实例
    static Monitor* get_instance() {
        std::mutex mt;
        lugard_sync(mt);
        if (instance == nullptr) {
            instance = new Monitor();
        }
        return instance;
    }
相关推荐
金融小师妹6 小时前
基于多源政策信号解析与量化因子的“12月降息预期降温”重构及黄金敏感性分析
人工智能·深度学习·1024程序员节
GIS数据转换器11 小时前
基于GIS的智慧旅游调度指挥平台
运维·人工智能·物联网·无人机·旅游·1024程序员节
南方的狮子先生1 天前
【C++】C++文件读写
java·开发语言·数据结构·c++·算法·1024程序员节
Neil今天也要学习1 天前
永磁同步电机无速度算法--基于三阶LESO的反电动势观测器
算法·1024程序员节
开开心心_Every2 天前
专业视频修复软件,简单操作效果好
学习·elasticsearch·pdf·excel·音视频·memcache·1024程序员节
liu****2 天前
16.udp_socket(三)
linux·开发语言·数据结构·c++·1024程序员节
草莓熊Lotso2 天前
《算法闯关指南:优选算法--位运算》--38.消失的两个数字
服务器·c++·算法·1024程序员节
unable code3 天前
攻防世界-Misc-can_has_stdio?
网络安全·ctf·misc·1024程序员节
思茂信息3 天前
CST License(Flexnet)设置与问题处理方法
服务器·网络·单片机·3d·php·1024程序员节·cst
2301_797892833 天前
论文阅读:《Hypergraph Motif Representation Learning》
论文阅读·1024程序员节