学习如何用 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;
    }
相关推荐
Stitch .8 分钟前
投稿正文_图床版
1024程序员节
stereohomology9 分钟前
更新字帖发现zcode的功能很丰富:dynamic workflows的表现
1024程序员节
张小姐的猫9 分钟前
【MySQL】内置函数
1024程序员节
乔旭伟9 分钟前
Vben3 中后台表格封装实战:useVbenVxeGrid 的全局收敛与七个坑
前端·anti-design-vue·1024程序员节
Liekkas Kono14 分钟前
20261017-20261024 周刊
1024程序员节·swhl
Daneas15 分钟前
3060 12G显卡+16G内存可以跑的Z-image效果与SD对比
ai作画·1024程序员节
我不会插花弄玉20 分钟前
12. 视图【由浅入深-MySQL】
1024程序员节
treesforest22 分钟前
游戏账号安全风险分层方案:IP信号分层与人机复核实践
tcp/ip·安全·游戏·1024程序员节
Evand J29 分钟前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang29 分钟前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节