学习如何用 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;
    }
相关推荐
拔剑纵狂歌3 天前
ClickHouse system.query_log 字段详解与排障实践
后端·clickhouse·1024程序员节
比奥利奥还傲.16 天前
哪吒监控面板实战:部署 Dashboard、接入 Agent、钉钉告警,再配置固定公网访问
网络·人工智能·分布式·1024程序员节
默 语17 天前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
学传打活1 个月前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续3)
微信公众平台·1024程序员节·汉字·昆仑正义文化
学传打活1 个月前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1681 个月前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心2 个月前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u0103055272 个月前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u0103055272 个月前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝2 个月前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节