当前位置:首页 » 《随便一记》 » 正文

超级好用的C++实用库之互斥锁

18 人参与  2024年04月29日 08:50  分类 : 《随便一记》  评论

点击全文阅读


概述

        互斥锁是一种用于多线程编程的同步机制,其主要目的是确保在并发执行环境中,同一时间内只有一个线程能够访问和修改共享资源。互斥锁的最基本功能是防止多个线程同时进入临界区(Critical Section),即一段需要独占执行的代码段。当一个线程获得互斥锁后,其他试图获取该锁的线程将被阻塞,直到拥有锁的线程释放了它。这样可以保证共享数据在任何给定时刻仅由一个线程修改,从而避免数据竞争和不一致的状态。

CHP_Mutex类

        在Windows和Linux操作系统下,实现互斥锁的数据结构和系统API接口有所不同:Windows使用CRITICAL_SECTION,Linux使用pthread_mutex_t。为了实现跨平台的API接口调用,我们封装了CHP_Mutex类。CHP_Mutex类的头文件,可参考下面的示例代码。

#pragma once#if defined _WIN32    #include <WinSock2.h>    #include <Windows.h>#else    #include <pthread.h>#endifclass CHP_Mutex{public:    CHP_Mutex();    ~CHP_Mutex();    void Lock();    void Unlock();    bool IsLocked();private:#if defined _WIN32    CRITICAL_SECTION m_cs;#else    pthread_mutex_t m_cs;#endif};

        CHP_Mutex类的公共接口有3个,下面分别进行介绍。

        Lock:锁定资源。

        Unlock:解锁资源。

        IsLocked:判断是否被锁定。返回值为true表示被锁定,false表示未被锁定。

CHP_Lock类

        直接使用CHP_Mutex类,有时候很容易漏写解锁资源的Unlock函数,从而导致资源一直无法释放。为了解决这个问题,我们可以利用面向对象技术对互斥锁进行封装,确保对象析构时,互斥锁肯定会被释放。基于这些考虑,我们封装了CHP_Lock类。CHP_Lock类的头文件,可参考下面的示例代码。

class CHP_Lock{public:    CHP_Lock(CHP_Mutex &mutex);    ~CHP_Lock();private:    CHP_Mutex &m_mutex;};

        CHP_Lock类只有一个构造函数和一个析构函数。在构造函数中,可以传入CHP_Mutex类型的互斥锁mutex。在析构函数中,我们会自动释放之前保存的互斥锁。

总结

        在C++ 11中,我们可以通过RAII(Resource Acquisition Is Initialization)技术来安全地管理互斥锁。比如:使用std::lock_guard或std::unique_lock来自动管理互斥锁的生命周期,确保在离开作用域时,无论如何都会释放锁。总之,互斥锁是实现线程同步的关键工具之一,对于保证多线程程序的数据一致性、正确性和安全性至关重要。


点击全文阅读


本文链接:http://zhangshiyu.com/post/101705.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 当女配看见弹幕后,被病娇男主强制爱了续集(裴纪洲江柠)_当女配看见弹幕后,被病娇男主强制爱了续集(裴纪洲江柠)
  • 「都市:比悍匪还猛,你管这叫警察?」章节限时抢先看‌_[苏浩]精彩章节免费试读
  • [乖乖女甜又野,偏执贺总失控沦陷]全集阅读_「温黎贺行舟」完结版免费阅读
  • 当女配看见弹幕后,被病娇男主强制爱了+结局+番外(裴纪洲江柠)列表_当女配看见弹幕后,被病娇男主强制爱了+结局+番外
  • 沈青禾霍沉洲+后续+结局(沈青禾霍沉洲)列表_沈青禾霍沉洲+后续+结局(沈青禾霍沉洲)全书+后续+结局在线
  • 全文当女配看见弹幕后,被病娇男主强制爱了+结局+番外(裴纪洲江柠)列表_全文当女配看见弹幕后,被病娇男主强制爱了+结局+番外
  • 当女配看见弹幕后,被病娇男主强制爱了结局+番外免费_(裴纪洲江柠)当女配看见弹幕后,被病娇男主强制爱了结局+番外列表_笔趣阁(裴纪洲江柠)
  • 当女配看见弹幕后,被病娇男主强制爱了+后续+结局(裴纪洲江柠)_(当女配看见弹幕后,被病娇男主强制爱了+后续+结局)列表_笔趣阁(裴纪洲江柠)
  • 全文桃花依然笑春风(陆乘渊云梵音)列表_全文桃花依然笑春风
  • 半是风雨半是霜全书+后续+结局(顾宴辞宋相欢)免费_(半是风雨半是霜全书+后续+结局)顾宴辞宋相欢列表_笔趣阁(顾宴辞宋相欢)
  • 人面桃花长相忆+后续+结局(阮雾梨闻砚辞阮见微)_(人面桃花长相忆+后续+结局)列表_笔趣阁(阮雾梨闻砚辞阮见微)
  • (沈意眠段钦言初见乍惊欢结局+番外)(初见乍惊欢沈意眠段钦言结局+番外)列表_笔趣阁

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1