《C/C++ 面试 100 例》(十六)自动锁

阅读: 评论:0

《C/C++ 面试 100 例》(十六)自动锁

《C/C++ 面试 100 例》(十六)自动锁

文章目录

    • 一、锁
    • 二、自动锁
      • 1、普通锁实现
      • 2、自动锁实现
      • 3、自动锁使用

一、锁

  • 锁 是 多线程编程 中一个很常用的概念,这里不多加介绍其原理,有兴趣可以参考 临界区 进行更多的了解;
  • 锁 一般会提供三个接口:加锁(Lock)、解锁(UnLock)、尝试加锁(TryLock);
  • 本文将利用 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 解锁;

本文发布于:2024-02-04 23:36:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718962860788.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:十六
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23