线程同步类
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();
}
}
}