『 Linux 』线程安全的单例模式,自旋锁与读写锁


单例模式

请添加图片描述

单例模式是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例;

这在需要严格控制如何及合适访问某个唯一资源型下有一定作用;

单利模式的主要特点为如下:

  • 私有构造函数

    单例模式通常要将构造私有化,以保证无法直接通过该类实例化出对应的对象;

    只能通过该类提供对应的接口来实例化整个对象,确保只有一个实例;

  • 私有静态实例

    私有静态实例保证实例只能在类内部进行访问,外部代码无法直接操作这个实例;

    可防止外部代码以外或恶意修改改实例;

    由于静态实例是私有的,可保证无论创建多少类的对象,静态成员始终只有一份;

    在单例模式中以该特性确保整个程序中只有一个这样的实例;

  • 公有静态函数

    公有静态函数提供全局访问点来获取唯一的实例;

    确保只允许外部代码通过该静态函数来访问类中唯一的实例;

    一般情况下如果该实例还未存在时该方法将会创建一个新的实例,如果已存在则直接返回现有实例;

单例模式的优点:

  • 保证一个类只有一个实例从而减少内存开销
  • 避免对资源的多重占用
  • 提供了对唯一实例的全局访问点

懒汉模式与饿汉模式

请添加图片描述

懒汉模式与饿汉模式属于单利模式加载方式的其中一种;

  • 懒汉加载模式

    懒汉模式指的是在进程启动时不立马加载实例,而是等到需要用到实例的时候再对实例进行加载;

    该加载方式由于单例在进程启动时未被加载从而能够有效提升进程整体的加载速度;

    但如果多个执行流同时在需要的时候加载实例时可能涉及到临界资源竞争问题,即懒汉模式不是线程安全的,故在以懒汉模式进行设计时应该要确保线程安全,如各个线程应通过互斥锁保持其互斥关系以避免临界资源竞争的问题;

    class SingletonPattern {
         
         
     public:
      // 获取单例实例的静态方法
      static SingletonPattern* getSP() {
         
         
        // 如果实例不存在,则创建一个新实例
        if (!sp_) sp_ = new SingletonPattern();
        // 返回单例实例
        return sp_;
      }
    
     private:
      // 私有构造函数,防止外部直接创建实例
      SingletonPattern() {
         
         
        // 无限循环,持续输出信息并暂停1秒
        while (1) {
         
         
          cout << "SingletonPattern is running..." << endl;
          sleep(1);
        }
      }
    
     private:
      // 静态成员变量,用于存储单例实例
      static SingletonPattern* sp_;
    };
    
    // 静态成员变量初始化为nullptr
    SingletonPattern* SingletonPattern::sp_ = nullptr;
    
    int main() {
         
         
      // 主程序开始前暂停3秒
      sleep(3);
      // 获取单例实例
      SingletonPattern* sp = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dio夹心小面包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值