您的位置:首页 > 编程语言 > C语言/C++

一个Windows C++ 读写锁的实现

2014-11-04 14:48 316 查看
#ifndef __RW_LOCK_H__
#define __RW_LOCK_H__

#include <windows.h>

/*************************************************************************
*** file: RWLock.h
***	Reference:
***	 http://bbs.csdn.net/topics/390331427?page=1 *************************************************************************/

class CRWLock
{
public:
CRWLock(): m_readCount(0), m_writeCount(0) {	::InitializeCriticalSection(&mtx); }
~CRWLock() { ::DeleteCriticalSection(&mtx); }

void ReadLock()
{
while(true)
{
if(!m_writeCount)
{
::InterlockedIncrement((volatile long*)&m_readCount);
if(m_writeCount)
{
// 有读写冲突,让位于写
::InterlockedDecrement((volatile long*)&m_readCount);
continue;
}
//获得读锁
break;
}

::Sleep(0);
}
}
void ReadUnlock() { ::InterlockedDecrement((volatile long*)&m_readCount); }

void WriteLock()
{
::InterlockedIncrement((volatile long*)&m_writeCount);
::EnterCriticalSection(&mtx);
// 等待已经在读的线程结束读操作
while(true)
{
if(!m_readCount)
break;

::Sleep(0);
}
}
void WriteUnlock()
{
::LeaveCriticalSection(&mtx);
::InterlockedDecrement((volatile long*)&m_writeCount);
}
private:
CRWLock(const CRWLock &);
CRWLock & operator = (const CRWLock &);
CRITICAL_SECTION mtx;
int m_readCount;
int m_writeCount;
};

#endif // !__RW_LOCK_H__
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: