网站管理制度建设的必要性,许昌网站制作公司,公司要做个网站吗,网站后台更新缓存失败点击蓝字关注我们来源于网络#xff0c;侵删一、锁1.锁 是 多线程编程 中一个很常用的概念#xff0c;这里不多加介绍其原理#xff0c;有兴趣可以参考 临界区 进行更多的了解#xff1b;2.锁 一般会提供三个接口#xff1a;加锁#xff08;Lock#xff09;、解锁#…点击蓝字关注我们来源于网络侵删一、锁1.锁 是 多线程编程 中一个很常用的概念这里不多加介绍其原理有兴趣可以参考 临界区 进行更多的了解2.锁 一般会提供三个接口加锁Lock、解锁UnLock、尝试加锁TryLock3.本文将利用 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个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步