class ZhkMutex
{
public:
ZhkMutex(void);
public:
virtual ~ZhkMutex(void);
public:
void ZhkLock();
void UnLock();
private:
CRITICAL_SECTION m_criticalSection;
};
class ZhkLock
{
public:
ZhkLock(ZhkMutex &mutex);
~ZhkLock(void);
void SetUnlock();
operator bool () const;
private:
ZhkMutex &m_mutex;
bool m_locked;
};
ZhkLock::ZhkLock(ZhkMutex&mutex)
: m_mutex(mutex), m_locked(true)
{
m_mutex.ZhkLock();
}
ZhkLock::~ZhkLock(void)
{/*一定要在析构函数中解锁,因为不管发生什么,只要对象离开他的生命周期(即离开大括号),都会调用其析构函数*/
m_mutex.UnLock();
}
void ZhkLock::SetUnlock()
{
m_locked = false;
}
ZhkLock::operator bool() const
{
return m_locked;
}
ZhkMutex.cpp
ZhkMutex::ZhkMutex(void)
{
InitializeCriticalSection(&m_criticalSection);
}
ZhkMutex::~ZhkMutex(void)
{
DeleteCriticalSection(&m_criticalSection);//保证对象被析构时候能够删除临界区
}
void ZhkMutex::ZhkLock()
{
EnterCriticalSection(&m_criticalSection);
}
void ZhkMutex::UnLock()
{
LeaveCriticalSection(&m_criticalSection);
}
```cpp
ZhkMutex::ZhkMutex(void)
{
InitializeCriticalSection(&m_criticalSection);
}
ZhkMutex::~ZhkMutex(void)
{
DeleteCriticalSection(&m_criticalSection);//保证对象被析构时候能够删除临界区
}
void ZhkMutex::ZhkLock()
{
EnterCriticalSection(&m_criticalSection);
}
void ZhkMutex::UnLock()
{
LeaveCriticalSection(&m_criticalSection);
}