学习如何用 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;
    }
相关推荐
开开心心就好7 天前
内存清理软件灵活设置,自动阈值快捷键清
运维·服务器·windows·pdf·harmonyos·risc-v·1024程序员节
学传打活9 天前
【边打字.边学昆仑正义文化】_5_宇宙物种创造简史(1)
微信公众平台·1024程序员节·汉字·昆伦正义文化
xcLeigh10 天前
打破机房围墙:VMware+cpolar构建跨网络虚拟实验室
vmware·内网穿透·cpolar·实验室·远程访问·1024程序员节
开开心心就好11 天前
免费轻量电子书阅读器,多系统记笔记听书
linux·运维·服务器·安全·ddos·可信计算技术·1024程序员节
unable code12 天前
流量包取证-大流量分析
网络安全·ctf·misc·1024程序员节·流量包取证
开开心心就好12 天前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
unable code13 天前
浏览器取证-[GKCTF 2021]FireFox Forensics
网络安全·ctf·misc·1024程序员节·浏览器取证
unable code13 天前
内存取证-[安洵杯 2019]Attack
网络安全·ctf·misc·1024程序员节·内存取证
unable code14 天前
CTF-SPCS-Forensics
网络安全·ctf·misc·1024程序员节·取证