同步锁

来源:互联网 发布:电脑打不开软件没反应 编辑:程序博客网 时间:2024/06/05 19:34
#pragma onceCMM_NS_BEGINclass 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);

原创粉丝点击