首页 > 其他分享 >单例模式

单例模式

时间:2023-09-15 12:11:34浏览次数:27  
标签:mutex 模式 实例 线程 单例 inst Analyser

Analyser* Analyser::Instance()
{
    static QMutex mutex;
    static QScopedPointer<Analyser> inst;
    if (Q_UNLIKELY(!inst)) {
        mutex.lock();
        if (!inst) {
            inst.reset(new Analyser);
        }
        mutex.unlock();
    }
    return inst.data();
}

上面是一个单例模式的实现。它确保在应用程序中只有一个Analyser对象的实例,并提供了一个全局访问点来获取该实例。

代码中使用了双重检查锁定机制来实现线程安全的单例。首先,它使用静态局部变量inst来保存Analyser对象的实例。在第一次调用Instance()方法时,inst为空,进入if (Q_UNLIKELY(!inst))的条件判断。

在进入条件判断后,使用QMutex来加锁,确保只有一个线程进入临界区。然后再次检查inst是否为空,这是为了避免多个线程同时通过第一个条件判断,然后同时创建多个实例。

如果inst为空,说明没有其他线程在创建实例,此时通过inst.reset(new Analyser)创建一个新的Analyser对象,并将其赋值给inst。然后解锁mutex,并返回inst.data(),即Analyser对象的指针。

如果inst不为空,说明已经有其他线程在创建实例,此时直接返回inst.data(),即已经存在的Analyser对象的指针。

通过这种方式,可以保证在多线程环境下只有一个Analyser对象的实例,并且在实例创建过程中保证线程安全。

标签:mutex,模式,实例,线程,单例,inst,Analyser
From: https://www.cnblogs.com/susiesnai-sun/p/17704744.html

相关文章

  • AP8660 DC-DC升压恒压芯片 PWM模式 24W
    AP8660是一款升压dc-dc转换器,是一㰪内置MOS调节器,内部补偿还可以最小代多达6个外部组件,内部的软识启动功能可以降压涌入电流AP8660SOT23-6封装,可以为PCB提供节省空间特点可调输出,最高达到24W内部固定PWM频率:1.0MHZ反馈电压:0.6V内置0.25Ω,2A,26V功率MOSFET停机电流:0.1PA过电压......
  • 趣解设计模式之《小店儿菜单的故事》
    〇、小故事在一座小镇上,有两家特别有名气的小店,一家是远近闻名的早餐店,它家的早餐特别好吃,每天早上都能排起长长的队伍;另一家是个蛋糕店,他家是专门从法国请来的蛋糕师傅,蛋糕的香味真是香飘万里。自从听说这个酱香拿铁销量非常高之后,这两家店的老板们就觉得强强联合才是能让小店更......
  • 1-Hadoop搭建单机模式
    一、在Hadoop的安装目录下,创建input目录cd/opt/programfile/hadoop-2.9.2/etc/hadoopmkdirinput二、拷贝xml文件到input目录下cp*.xmlinput/三、执行Hadoopjobjob是使用hadoop自带的样例,在input中统计含有......
  • 常用设计模式
    一、工厂模式+单例模式使用工厂模式来创建对象,通过单例模式来保证该工厂只有一个实例,从而减少创建对象时的开销。首先,创建一个工厂类,该类使用单例模式来保证只有一个实例,该实例负责创建对象。然后,根据需要创建多个工厂方法,每个方法用于创建不同的对象。classSingletonFacto......
  • 7.前端设计模式之模块模式
    将代码拆分成更小更易复用的代码块 JavaScript从ES2015开始支持模块化,一个文件就是一个模块,以前也可以把一个大的JS文件拆分到多个文件里,但容易出现定义的变量、函数名称冲突,文件多了依赖关系也不好管理,上线时觉得a.js文件没什么用就没发布,直到某个功能出现xxxisnotafunction......
  • 软件设计模式系列之五——建造者模式
    1模式的定义建造者模式是一种对象创建型设计模式,它将一个复杂对象的构建过程与其表示分离。这意味着你可以使用相同的构建过程来创建不同类型的对象,而不必关心每个对象的内部细节。这种模式适用于构建具有复杂配置的对象,例如具有多个可选组件的汽车。2结构建造者模式的结构包......
  • 企业开发模式
          ......
  • 设计模式回顾之一:单例模式(Java的4种实现)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------作为一个程序员,我并不知道"茴"字有4种写法。但是,我知道单例有4种写法。单例模式目的:保证一个类仅有一个实例,并提供一个访问它的全局访......
  • 设计模式回顾之二:外观/门面模式(Facade)
    设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。------------------------------------------------外观/门面模式(Facade)希望简化原有系统的使用方式,需要定义自己的接口。Facade模式简化了对所需子系统的使用过程,但是由于Facade并不......
  • 关于缓存系统的mutex模式实现
    这篇blog是在上一家互联网公司某产品开发过程中的一些经验总结,整理一下分享上来。 关于mutex模式:对于高并发大访问量的应用,一般都会在数据库访问前加一层缓存系统。但是如果某一时刻某个缓存的key失效,而reload该key缓存的时间又比较长,导致大量的请求直接访问数据库,则会直接将数据......