// 头文件
class CCriticalSection
{
private:
/// OS-specific critical section object
CRITICAL_SECTION section;
public:
/// construction
CCriticalSection(void);
/// destruction
~CCriticalSection(void);
/// Acquire the mutex, i.e. enter the critical section
void Acquire();
/// Release the mutex, i.e. leave the critical section
void Release();
};
// Mutex functionality
__forceinline void CCriticalSection::Acquire()
{
EnterCriticalSection (§ion);
}
__forceinline void CCriticalSection::Release()
{
LeaveCriticalSection (§ion);
}
/**
* RAII lock class for \ref CCriticalSection mutexes.
*/
class CCriticalSectionLock
{
private:
CCriticalSection& section;
public:
__forceinline CCriticalSectionLock (CCriticalSection& section)
: section (section)
{
section.Acquire();
}
__forceinline ~CCriticalSectionLock()
{
section.Release();
}
};
// 源文件
CCriticalSection::CCriticalSection(void)
{
InitializeCriticalSectionAndSpinCount (§ion, 5000);
}
CCriticalSection::~CCriticalSection(void)
{
DeleteCriticalSection (§ion);
}