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

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

概述

互斥锁是一种用于多线程编程的同步机制,其主要目的是确保在并发执行环境中,同一时间内只有一个线程能够访问和修改共享资源。互斥锁的最基本功能是防止多个线程同时进入临界区(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>
#endif

class 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来自动管理互斥锁的生命周期,确保在离开作用域时,无论如何都会释放锁。总之,互斥锁是实现线程同步的关键工具之一,对于保证多线程程序的数据一致性、正确性和安全性至关重要。


相关文章
|
4月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
110 6
|
4月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
144 10
|
1月前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
47 11
|
4月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
98 5
|
4月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
95 1
|
5月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
63 6
|
5月前
|
安全 C++
超级好用的C++实用库之环形内存池
超级好用的C++实用库之环形内存池
101 5
|
5月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
50 1
|
5月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
204 1
|
5月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
162 0