设计模式——单例模式(懒加载)

本文详细探讨了单例模式的懒加载实现,分析了不同版本的线程安全问题和效率问题。从最初的线程不安全版本,到使用互斥锁解决线程安全,再到双if优化单线程效率,最后引入volatile和barrier防止编译器及CPU优化带来的影响。文章旨在揭示如何在保证线程安全的同时,优化单例模式的性能。
摘要由CSDN通过智能技术生成

这篇文章总结几种比较常用的设计模式,,,不懂得设计模式。。。怎么敢称熟悉OOP思想。

单例模式的核心结构中只包含一个被称为单例类的特殊类,通过单例模式可以保证系统中一个类只有一个实例

由于快加载单例模式是线程安全的,所以本文只讨论懒加载单例模式的线程安全问题

版本一 使用懒加载(快加载),程序调用时再分配内存,然后初始化


class Singleton
{
   
public:
    static Singleton* getInstance()  //该公有接口专门返回对象实例
    {
        if(sobj == NULL)
        {
            sobj = new Signleton();//懒加载,懒加载,程序调用时才生分配内存
        }
        return sobj;
    }
private:
    Singlenton(){};  //私有化构造函数
    static Singlenton *sobj;
}
signlenton* signlenton::sobj = NULL;//慢加载,程序调用时才会生成,然后初始化

上述代码存在线程安全问题,if语句非原子操作,多线程调用时,会存在竞态条件

版本二 使用懒加载,考虑到多线程安全问题,使用互斥锁可以解决

1,考虑多线程调用时,是否存在竞态条件
2࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值