windows读写锁
来源:互联网 发布:linux查找文件路径命令 编辑:程序博客网 时间:2024/06/13 02:50
/**@file CWRGuard.h*@note *@brief 读写锁**@author Jlzlight*@date 2017-9-27**@note *@note 历史记录:*@note V1.0.0 **@warning *//*读写锁的特点如下:1)如果有其它线程读数据,则允许其它线程执行读操作,但不允许写操作。2)如果有其它线程写数据,则其它线程都不允许读、写操作。读写锁分为读锁和写锁,规则如下:1)如果某线程申请了读锁,其它线程可以再申请读锁,但不能申请写锁。2)如果某线程申请了写锁,其它线程不能申请读锁,也不能申请写锁。*/#pragma once#include <windows.h>class SyncObject{public:SyncObject(void);~SyncObject(void);void ReadLock();void unReadLock();void WriteLock();void unWriteLock();private:SyncObject(const SyncObject& syncObject);SyncObject& operator = (const SyncObject& syncObject);private:SRWLOCK m_srwLock;};inline SyncObject::SyncObject(void){InitializeSRWLock(&m_srwLock);}inline SyncObject::~SyncObject(void){//system release}inline void SyncObject::ReadLock(){AcquireSRWLockShared(&m_srwLock);}inline void SyncObject::unReadLock(){ReleaseSRWLockShared(&m_srwLock);}inline void SyncObject::WriteLock(){AcquireSRWLockExclusive(&m_srwLock);}inline void SyncObject::unWriteLock(){ReleaseSRWLockExclusive(&m_srwLock);}class CRWGuard{public:// true read lock / false write lockexplicit CRWGuard(SyncObject* pscLock, bool isReadLock = true);~CRWGuard(void);private:CRWGuard(const CRWGuard& syncObject);CRWGuard& operator = (const CRWGuard& syncObject);private:SyncObject* m_pcsLock;bool m_bIsReadLock;};inline CRWGuard::~CRWGuard(void){try{if (NULL != m_pcsLock){if(m_bIsReadLock){m_pcsLock->unReadLock();}else{m_pcsLock->unWriteLock();}}}catch (...){}}inline CRWGuard::CRWGuard(SyncObject* pscLock, bool isReadLock): m_pcsLock(pscLock), m_bIsReadLock(isReadLock){if (NULL != m_pcsLock){if(m_bIsReadLock){m_pcsLock->ReadLock();}else{m_pcsLock->WriteLock();}}}
阅读全文
0 0
- WINDOWS下读写锁
- WINDOWS下读写锁
- windows读写锁实现
- windows读写锁
- Windows下C++读写锁
- Windows下C++读写锁
- Windows 平台之读写锁
- Windows下的读写锁
- Windows内核中的读写锁
- 在Windows实现C++锁的读写
- Windows平台下的读写锁
- 关于windows内核下的读写锁
- WINDOWS读写锁的简单实现
- 关于windows内核下的读写锁
- linux、Windows、boost库读写锁
- 一个Windows C++ 读写锁的实现
- java读写windows注册表
- WINDOWS AD读写数据
- 人群分析--ResnetCrowd: A Residual Deep Learning Architecture
- java web日志记录之spring aop实现方式
- 使用Qt Designer来设计界面
- 再说Runnable、Callable、Future、线程池
- Mac中NTFS格式文件的读写
- windows读写锁
- Babel 7步入门教程
- 房间安排
- Qt状态栏(statusbar)的使用
- etcd集群日常维护
- 网站被攻击了怎么办?常见的攻击又有哪些呢?
- 89. Gray Code
- 100个免费可商用字体,你总有一天用到它
- linux下svn服务器搭建及创建分支