⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rwlock.h

📁 概述:数据的纵向收集
💻 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 + -