一个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__
相关文章推荐
- 实现了一个 native层读写音频数据时用到的一个 音频数据缓冲区(线程安全的)(c++)
- 一个Windows C++的线程池的实现
- 在Windows实现C++锁的读写
- 一个Windows C++的线程池的实现
- 一个Windows C++的线程类实现
- windows下VS2010中使用netcdf的C++接口实现.nc文件的读写
- 一个简单的 websocket的 c++ 服务器 实现windows
- 一个Windows C++的线程池的实现
- 一个Windows C++的线程池的实现
- 一个Windows C++的线程类实现
- 一个Windows C++的线程类实现(封装API,形成一个类,但不完善。其实可以学习一下Delphi的TThread的写法)
- Cpp-一个Windows C++的线程类实现
- 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
- windows平台下Gearman的一个Worker和Client实例,C++实现
- 一个Windows C++的线程类实现
- 一个基于Loki::SingletonHolder的Windows线程安全的C++日志类实现
- 一个Windows C++的线程池类实现
- 在windows 下用C实现的一个多播的简单例子。
- 一个HTTP.二进制POST和HTTP指定长度接收的C++实现
- 一个Java Enum的C++实现