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

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

7 人参与  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