一个简单的读写锁的实现(WINDOWS平台)
来源:互联网 发布:视频后期制作软件 编辑:程序博客网 时间:2024/06/04 18:56
#include<windows.h>
class CReadWriteLock
{
private:
LONGmdwReaders;
CRITICAL_SECTION mEnterLock;
public:
CReadWriteLock(void);
~CReadWriteLock(void);
boolReadLock();
boolReadUnlock();
boolWriteLock();
boolWriteUnlock();
};
/***************************************************
CReadWriteLock::CReadWriteLock(void)
构造函数
*****************************************************/
inline CReadWriteLock::CReadWriteLock(void)
{
InitializeCriticalSection(&mEnterLock);
mdwReaders =0;
#ifdef_FAN_DEBUG__
std::cout<<"Create ReadWriteLock"<<endl;
#endif//_FAN_DEBUG__
}
/***************************************************
CReadWriteLock::~CReadWriteLock(void)
析构函数
*****************************************************/
inline CReadWriteLock::~CReadWriteLock(void)
{
DeleteCriticalSection(&mEnterLock);
#ifdef_FAN_DEBUG__
std::cout<<"Delete ReadWriteLock"<<endl;
#endif//_FAN_DEBUG__
}
/***************************************************
CReadWriteLock::ReadLock()
读加锁
返回植:true 锁定成功
false 其它情况
*****************************************************/
inline bool CReadWriteLock::ReadLock()
{
EnterCriticalSection(&mEnterLock);
InterlockedIncrement(&mdwReaders);
LeaveCriticalSection(&mEnterLock);
#ifdef_FAN_DEBUG__
std::cout<<"Reader lock success."<<endl;
#endif//_FAN_DEBUG__
returntrue;
}
/***************************************************
CReadWriteLock::ReadUnlock()
读开锁
返回植:true 锁定成功
false 其它情况
*****************************************************/
inline bool CReadWriteLock::ReadUnlock()
{
InterlockedDecrement(&mdwReaders);
#ifdef_FAN_DEBUG__
std::cout<<"Reader unlock success."<<endl;
#endif//_FAN_DEBUG__
returntrue;
}
/***************************************************
CReadWriteLock::WriteLock()
写加锁
返回植:true 锁定成功
false 其它情况
*****************************************************/
inline bool CReadWriteLock::WriteLock()
{
//HANDLEmhThread = GetCurrentThread();
//BOOLmbSetPrioritySuccess = FALSE;
EnterCriticalSection(&mEnterLock);
//直到读的用户全部退出
//if(mdwReaders>0)
//{
// mbSetPrioritySuccess =
// SetThreadPriority(mhThread,THREAD_PRIORITY_LOWEST);
//}
while(mdwReaders>0)
{
#ifdef_FAN_DEBUG__
std::cout<<"Writer lock test Readernumber."<<endl;
std::cout<<"Current Reader number is"<<mdwReaders<<endl;
#endif//_FAN_DEBUG__
Sleep(0);
}
//if(mbSetPrioritySuccess)
//{
// SetThreadPriority(mhThread,THREAD_PRIORITY_NORMAL);
//}
#ifdef_FAN_DEBUG__
std::cout<<"Writer lock success."<<endl;
#endif//_FAN_DEBUG__
returntrue;
}
/***************************************************
CReadWriteLock::WriteUnlock()
写解锁
返回植:true 锁定成功
false 其它情况
*****************************************************/
inline bool CReadWriteLock::WriteUnlock()
{
LeaveCriticalSection(&mEnterLock);
#ifdef_FAN_DEBUG__
std::cout<<"Writer unlock success."<<endl;
#endif//_FAN_DEBUG__
returntrue;
}
- 一个简单的读写锁的实现(WINDOWS平台)
- 一个简单的读写锁(Windows 平台)
- WINDOWS读写锁的简单实现
- 一个Windows C++ 读写锁的实现
- 自己实现一个简单的读写锁
- Windows平台下的读写锁
- 一个简单的读写文件程序-适用于MTK平台资源管理
- 一个简单的I/O读写锁
- 在Windows实现C++锁的读写
- Java 读写锁的简单实现
- java模拟实现简单的读写锁
- Java中简单的读写锁实现
- 读写分离锁的简单实现
- c++的跨平台的读写锁的实现
- windows平台上的一个内存池的实现
- 一个写优先的读写锁实现
- Windows平台基于多进程的echo服务器简单实现
- 简单的C++线程类实现, windows平台
- 脚本中关于系统时间
- Java数据结构和算法--栈与队列
- Myeclipse优化总结
- CListBox 使用技巧
- ibatisNet 数据访问框架
- 一个简单的读写锁的实现(WINDOWS平台)
- SQL Server 优化存储过程的七种方法
- MFC中交换两个按钮的位置,坐标的转换真是麻烦
- 博客
- Wince 6.0 BSP的移植(二)
- execution用法
- java.io.IOException: Stream closed异常
- 关于QT中显示中文的一些研究
- select sql 语句执行过程 顺序