📄 rwlock.h
字号:
//sunwangme@hotmail.com
// ReadWrite lock
// $Revision: 3 $
// $Date: 02-10-01 3:26p $
// $Author: Kuooo $
#pragma once
#if !defined(NEWLOCK) && !defined(OLDLOCK)
#include "MeteredSection.h"
class CRWLock
{
public:
CRWLock();
~CRWLock();
void ReadLock();
void ReadUnlock();
void WriteLock();
bool WriteTryLock();
void WriteUnlock();
private:
CRITICAL_SECTION mutex;
LPMETERED_SECTION dataLock;
int readerCount;
};
#elif defined(OLDLOCK)
class CRWLock
{
public:
CRWLock();
~CRWLock();
void ReadLock();
void ReadUnlock();
void WriteLock();
bool WriteTryLock();
void WriteUnlock();
private:
CRITICAL_SECTION mutex;
HANDLE dataLock;
int readerCount;
};
#else
#define USE_SPINLOCK
class CRWLock
{
protected:
#ifdef USE_SPINLOCK
long m_lock;
void Wait();
void Enter()
{
guard(void Enter() );
if (InterlockedExchange(&m_lock, 1))
Wait();
unguard;
}
void Leave()
{
guard(void Leave());
InterlockedExchange(&m_lock, 0);
unguard;
}
#else
CRITICAL_SECTION m_lock;
void Enter()
{
guard(void Enter());
EnterCriticalSection(&m_lock);
unguard;
}
void Leave()
{
guard(void Leave());
LeaveCriticalSection(&m_lock);
unguard;
}
#endif
int m_nLock;
int m_nRead;
int m_nWrite;
HANDLE m_hREvent;
HANDLE m_hWEvent;
public:
CRWLock();
~CRWLock();
void ReadLock();
void ReadUnlock();
void WriteLock();
void WriteUnlock();
bool WriteTryLock();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -