- #ifndef _Crisection_Lock_H
#define _Crisection_Lock_H
#include <windows.h>
-
- //锁接口类
- class ILock
- {
- public:
- virtual ~ILock() {}
- virtual void Lock() const = 0;
- virtual void Unlock() const = 0;
- };
-
-
//临界区锁类
class CCriSection :public ILock
{
public:
CCriSection(void);
~CCriSection(void);
virtual void Lock() const;
virtual void Unlock() const;
private:
CRITICAL_SECTION m_critclSection;
};
//锁
class CMyLock
{
public:
CMyLock(const ILock&);
~CMyLock();
private:
const ILock& m_lock;
};
#endif
- #include "stdafx.h"
#include "CriSection.h"
CCriSection::CCriSection(void)
{
::InitializeCriticalSection(&m_critclSection);
}
CCriSection::~CCriSection(void)
{
::DeleteCriticalSection(&m_critclSection);
}
//进入临界区,加锁
void CCriSection::Lock() const
{
::EnterCriticalSection((LPCRITICAL_SECTION)&m_critclSection);
}
//离开临界区,解锁
void CCriSection::Unlock() const
{
::LeaveCriticalSection((LPCRITICAL_SECTION)&m_critclSection);
}
//利用C++特性,进行自动加锁
CMyLock::CMyLock(const ILock& m) : m_lock(m)
{
m_lock.Lock();
}
//利用C++特性,进行自动解锁
CMyLock::~CMyLock()
{
m_lock.Unlock();
}
临界区是线程级别的锁,不能用于进程间的同步, 它不属于内核对象, 所以速度比较快,临界区锁耗时比互斥锁耗时节约了大概5倍的时间