点击蓝字

关注我们
来源于网络,侵删
一、锁
1.锁 是 多线程编程 中一个很常用的概念,这里不多加介绍其原理,有兴趣可以参考 临界区 进行更多的了解;
2.锁 一般会提供三个接口:加锁(Lock)、解锁(UnLock)、尝试加锁(TryLock);
3.本文将利用 C++ 的 构造函数 和 析构函数,把 加锁 和 解锁 在一行代码中 实现;
二、自动锁
1、普通锁实现
- 这里利用 CRITICAL_SECTION 相关的接口实现了一系列普通锁的接口封装; 
class ILock
{
public:ILock(){}virtual ~ILock(){}virtual void Lock(void) = 0;virtual bool TryLock(void) = 0;virtual void UnLock(void) = 0;
};class NLock : public ILock
{
public:NLock (){InitializeCriticalSection(&m_kSection);}virtual ~NLock (){DeleteCriticalSection(&m_kSection);}virtual void Lock(void){EnterCriticalSection(&m_kSection);}virtual bool TryLock(void){return (TryEnterCriticalSection(&m_kSection) > 0);}virtual void UnLock(void){LeaveCriticalSection(&m_kSection);}
protected:CRITICAL_SECTION m_kSection;
};2、自动锁实现
- 1)构造函数:接收传入的 锁指针,并且存成成员变量; 
- 2)析构函数:对成员变量的锁执行解锁操作; 
class AutoLock   // 注意:这里不继承 ILock
{
public:AutoLock(ILock *pkLock) {m_pkLock = pkLock;m_pkLock->Lock();}~AutoLock() {m_pkLock->UnLock();}
protected:ILock*  m_pkLock;
};3、自动锁使用
int main() {NLock m_kLock;{AutoLock kAutoLock(&m_kLock);   // 1)构造函数中执行 m_kLock 的加锁// 执行对应加锁后的操作}// 2)退出 kAutoLock 作用域,自动调用析构,执行 m_kLock 解锁return 0;
}- 1)构造函数中执行 m_kLock 的加锁; 
- 2)退出 kAutoLock 作用域,自动调用析构,执行 m_kLock 解锁; 

如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!▲扫描二维码-免费领取
戳“阅读原文”我们一起进步