双重检查锁定及单例模式

博客围绕双重检查锁定及单例模式展开,涉及信息技术领域中程序设计的相关内容,双重检查锁定是一种优化手段,单例模式是常见设计模式,二者结合可实现高效且安全的单例创建。
C++中的饿汉单例模式(Eager Singleton)和双重检查锁定(Double-Checked Locking)是两种常见的单例模式实现策略,它们旨在保证全局只有一个实例并解决线程安全性问题。 **饿汉模式 (Eager Singleton):** 饿汉模式是在类加载时就创建了单例实例。这种模式的优点在于对线程安全的支持非常好,因为实例已经在类加载时创建,不会受到并发影响。但是,如果应用启动初期不需要该单例,这可能导致早期资源浪费。 **示例代码**(饿汉模式): ```cpp class Singleton { private: Singleton() {} // 私有构造函数 public: static Singleton& getInstance() { static Singleton instance; return instance; } }; ``` **双重检查锁定 (Double-Checked Locking):** 双检查锁定是一种优化过的懒汉模式,它避免了每次请求实例时都需要加锁带来的性能损耗。它通过两次检查来判断实例是否已经存在:第一次检查是否有实例,第二次检查并创建实例(如果之前没有)。 **示例代码**(带双重检查锁定的懒汉模式): ```cpp class Singleton { private: Singleton() {} // 私有构造函数 mutable std::once_flag flag; // 使用std::once_flag控制一次性执行 public: Singleton* getInstance() EXCLUSIVE_LOCKS_REQUIRED(mutex) { std::call_once(flag, []{ /* 创建实例 */ }); return new Singleton(); } static void initInstance(Singleton*) {} // 初始化操作,可能涉及耗时操作 }; // 同步块保证了getInstance在第一次调用时会执行initInstance Singleton* s = Singleton::getInstance(); ``` 这里使用`std::call_once`确保只初始化一次,且在初始化过程中持有互斥锁,确保线程安全。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值