头文件声明(CAutoLock.h):
#ifndef AUTO_LOCKER_HEAD_FILE
#define AUTO_LOCKER_HEAD_FILE
#pragma once
//数据锁定
class CAutoLocker
{
//变量定义
private:
INT m_nLockRef; //锁定计数
CCriticalSection & m_CriticalSection; //锁定对象
//函数定义
public:
//构造函数
CAutoLocker(CCriticalSection & CriticalSection);
//析构函数
virtual ~CAutoLocker();
//操作函数
public:
//锁定函数
VOID Lock();
//解锁函数
VOID UnLock();
//状态函数
public:
//锁定次数
inline INT GetLockRef() { return m_nLockRef; }
};
#endif
源码实现(CAutoLock.cpp):
#include "StdAfx.h"
#include "CAutoLocker.h"
//构造函数
CAutoLocker::CAutoLocker(CCriticalSection & CriticalSection)
: m_CriticalSection(CriticalSection)
{
//设置变量
m_nLockRef=0;
//锁定对象
Lock();
return;
}
//析构函数
CAutoLocker::~CAutoLocker()
{
//解除锁定
while (m_nLockRef>0)
{
UnLock();
}
return;
}
//锁定函数
VOID CAutoLocker::Lock()
{
//锁定对象
m_CriticalSection.Lock();
//设置变量
m_nLockRef++;
return;
}
//解锁函数
VOID CAutoLocker::UnLock()
{
//效验状态
ASSERT(m_nLockRef>0);
if (m_nLockRef==0) return;
//设置变量
m_nLockRef--;
//解除锁定
m_CriticalSection.Unlock();
return;
}
来源:CSDN
作者:老狼主
链接:https://blog.csdn.net/u012156872/article/details/103715276