尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
线程安全的单例模式:饿汉模式懒汉模式
目录一、单例模式二、饿汉模式1.特点2.实现关键3.代码实现三、懒汉模式1.特点2.实现关键3.代码实现一、单例模式单例模式一种典型的设计模式。应用场景一个类只能实例化一个对象向外提供统一访问接口的场景。作用对资源进行统一管理以及避免数据在不同对象中出现不同的体现。两种实现饿汉模式懒汉模式二、饿汉模式1.特点资源静态化。在程序初始化阶段完成对象的实例化。以空间换时间的思想在使用的时候就可以直接使用。优点在构造对象时不需要考虑线程安全问题。缺点初始化速度慢。2.实现关键1如何在程序初始化阶段完成对象的实例化解决方法在类中定义唯一的对象且用static修饰对象2如何让一个类只能有一个对象解决方法私有化构造函数3.代码实现#includeiostream class Singleton { private: int _data; static Singleton _eton; Singleton () : _data(0) {} public: static Singleton *GetInstance() { return _eton; } int *GetData() { return _data; } }; Singleton Singleton::_eton; int main() { std::cout Singleton::GetInstance() - GetData() std::endl; return 0; }三、懒汉模式1.特点对象在访问使用的时候才去实例化。一种延迟加载的思想用的时候再去加载节省资源。优点初始化速度快。缺点在构造对象时需要考虑线程安全问题。2.实现关键1如何在访问使用的时候采取实例化对象解决方法在类中定义唯一的对象指针且用static修饰2如何让一个类只能有一个对象解决方法私有化构造函数总结1.定义静态对象指针2.构造函数私有化3.加锁保护对象构造过程4.double check提高效率5.volatile关键字修饰防止编译器过度优化。3.代码实现#includeiostream #includemutex class Singleton { private: int _data; /*volatile*/static Singleton *_eton;//c语言实现时需要加上volatile关键字保持_eton内存可见性,防止编译器过度优化 static std::mutex _mutex; Singleton() {} public: static Singleton *GetInstance(){ if (_eton NULL) {//双层检测降低锁冲突概率 _mutex.lock();//加锁确保线程安全 if (_eton NULL) { _eton new Singleton(); } _mutex.unlock(); } return _eton; } int *GetData() { return _data; } }; Singleton* Singleton::_eton NULL; std::mutex Singleton::_mutex; int main() { std::cout Singleton::GetInstance() - GetData() std::endl; return 0; }
RELATED

相关推荐

AOSP Ubuntu编译环境搭建

AOSP Ubuntu编译环境搭建

一、搭建环境 Liunx系统:Ubuntu18.04 Android系统:12 现在open-vm-tools(推荐open-vm-tools-desktop,能够实现分辨率自适应)可以直接通过apt安装,速度快(只有13M),一键安…

📅 2026/9/1 14:02:28
Skill-Agent 如何实践:从概念到落地的完整指南

Skill-Agent 如何实践:从概念到落地的完整指南

引言:为什么需要 Skill-Agent? 在当今快速发展的 AI 应用领域,单一、庞大的通用模型往往难以应对复杂、多变的业务场景。Skill-Agent(技能智能体)架构应运而生,它通过将复杂任务分解为一系列可复用、可编排…

📅 2026/9/1 10:29:29
DuckDB 分析 10GB 日志 CSV:把 pandas 30 分钟查询压到 8 秒,我只做了这三步

DuckDB 分析 10GB 日志 CSV:把 pandas 30 分钟查询压到 8 秒,我只做了这三步

DuckDB 分析 10GB 日志 CSV:把 pandas 30 分钟查询压到 8 秒,我只做了这三步 说实话,我最近被一个 10GB 的 Nginx 访问日志搞得很烦。 业务要做一个“最近 30 天接口访问热度”的临时分析,数据导出来是 10GB 的 CSV。我用 pandas …

📅 2026/9/8 11:17:52
MORE NEWS

更多资讯

📰

Valhalla静态审阅Qwen3源码:大厂基础设施的工程启示

Valhalla 静态工程审阅 #023来了。这一期拖了很久,一直在等一个合适的开源项目,不想为凑更新随便拿个小库水一期,干脆等到了 Qwen3 的官方仓库结构全面稳定下来,才动手做这轮源码证据驱动的评测。这一期和之前最大的不同在于一个大…

📰

STM32+MPU6050计步器从驱动到算法:原理、滤波与参数调优

简介:面向STM32单片机学习者和毕业设计/课程设计人群,这是一套基于STM32MPU6050的便携计步器完整设计方案。系统利用MPU6050陀螺仪与DMP库实现高精度步数检测,并通过OLED屏实时显示步数,核心源码、原理图与外壳结构均包含在内。资…

📰

C语言指针与内存管理核心技巧详解

1. C语言核心概念深度解析(二)在上一期C语言核心概念梳理中,我们重点讨论了数据类型、运算符和流程控制等基础内容。这次我们将深入探讨指针、内存管理、文件操作和结构体这四个真正让C语言区别于其他高级语言的核心特性。这些概念不仅是面试…

📰

个人开发者接入Agent开放平台:从Skill开发到应用上架全流程实战

最近不少朋友在问,个人开发者到底能不能玩转 Agent 应用?我的结论是:能,而且现在正是窗口期。随着 WorkBuddy 开放平台向个人开发者开放接入,以往只属于大厂技术团队的 Agent 构建能力,现在一个人、一台电脑…

📰

Jaeger 中基于 MCP Skill 的 N+1 查询模式检测指南

Jaeger 中基于 MCP Skill 的 N1 查询模式检测指南 【免费下载链接】jaeger CNCF Jaeger, a Distributed Tracing Platform 项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger 分布式系统中,N1 查询(N1 Query)是最隐蔽也最常见…

📰

Git 命令

Git 命令1. git stash2. git cherry3. git cherry-pick4. git pull VS git pull --rebase5. git commit --amend6. tag相关6.1 创建 tag6.2 推送 tag6.3 删除tag6.4 查看tag1. git stash 1.1 基本保存修改 git stash 或 git stash push -m "描述你的修改"1.2 查看存…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬