CYYMysql 源码解读 2
线程同步类
Lock.h文件和Lock.cpp文件实现比较简单,使用的是临界区,临界区是用户态的线程间切换消耗不是很大,而事件内核对象、信号量、互斥量都是内核态的,调用的时候会切换到内核态,所以尽量使用临界区来同步线程间操作。详细信息可以查看windows核心编程,上面讲解的很详细。
#pragma once //#include "windows.h" namespace YYMYSQL { class CLock { public: CLock(void); ~CLock(void); public: void Lock(); void UnLock(); private: CRITICAL_SECTION m_cs; }; class CAutoLock { public: CAutoLock(CLock *t); ~CAutoLock(); private: CLock *m_pLock; }; }
cpp文件实现:
#include "StdAfx.h" #include ".\lock.h" namespace YYMYSQL { CLock::CLock(void) { InitializeCriticalSection(&m_cs); } CLock::~CLock(void) { DeleteCriticalSection(&m_cs); } void CLock::Lock() { EnterCriticalSection(&m_cs); } void CLock::UnLock() { LeaveCriticalSection(&m_cs); } CAutoLock::CAutoLock(CLock *t) { m_pLock = t; if (m_pLock) { m_pLock->Lock(); } } CAutoLock::~CAutoLock() { if (m_pLock) { m_pLock->UnLock(); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。