#pragma once
CMM_NS_BEGIN
class SyncObject
{
public:
SyncObject(void);
SyncObject(DWORD dwSpinCount);
~SyncObject(void);
void lock();
void unlock();
private:
CRITICAL_SECTION m_SyncObject;
private:
CMM_DISALLOW_EVIL_CONSTRUCTORS(SyncObject);
};
inline SyncObject::SyncObject(DWORD dwSpinCount)
{
if (!InitializeCriticalSectionAndSpinCount(&m_SyncObject,dwSpinCount))
{
HLOG_COMMON(HLOG_LEVEL_ERROR,"InitializeCriticalSectionAndSpinCount failed ...");
}
}
inline SyncObject::SyncObject(void)
{
InitializeCriticalSection(&m_SyncObject);
}
inline SyncObject::~SyncObject(void)
{
DeleteCriticalSection(&m_SyncObject);
}
inline void SyncObject::lock()
{
EnterCriticalSection(&m_SyncObject);
}
inline void SyncObject::unlock()
{
LeaveCriticalSection(&m_SyncObject);
}
class CGuard
{
public:
explicit CGuard(SyncObject* pscLock);
~CGuard(void);
private:
SyncObject* m_pcsLock;
private:
CMM_DISALLOW_EVIL_CONSTRUCTORS(CGuard);
};
inline CGuard::~CGuard(void)
{
try
{
if (NULL != m_pcsLock)
{
m_pcsLock->unlock();
}
}
catch (...)
{
}
}
inline CGuard::CGuard(SyncObject* pscLock)
: m_pcsLock(pscLock)
{
if (NULL != m_pcsLock)
{
m_pcsLock->lock();
}
}
CMM_NS_END
//
使用:先定义SyncObject m_soMapStatusStatistics;
在使用CGuard guard(&m_soMapStatusStatistics);
同步锁
最新推荐文章于 2022-09-08 17:51:53 发布