线程同步 Slim读写锁 SRWLOCK 用户模式同步对象 InitializeSRWLock
2015-11-10 15:01
429 查看
0、思考
如果写线程被阻塞期间不断的有读线程请求共享式访问共享资源,到底该不该予以访问权限呢?
1、相关api
SRWLOCK InitializeSRWLock AcquireSRWLockExclusive AcquireSRWLockShared ReleaseSRWLockExclusive ReleaseSRWLockShared
2、写在前面
独占式访问:写线程访问共享资源的方式; 共享式访问:读线程访问共享资源的方式; 当有读线程访问资源时,写线程等待访问时,新的读线程因为有写线程等待所以不允许访问。(保证读写的公平)
3、api说明
typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; typedef struct _RTL_SRWLOCK { PVOID Ptr; } RTL_SRWLOCK, *PRTL_SRWLOCK; // 初始化读写锁 WINBASEAPI VOID WINAPI InitializeSRWLock ( __out PSRWLOCK SRWLock ); // 独占式访问 WINBASEAPI VOID WINAPI AcquireSRWLockExclusive ( __inout PSRWLOCK SRWLock ); // 共享式访问 WINBASEAPI VOID WINAPI AcquireSRWLockShared ( __inout PSRWLOCK SRWLock ); // 独占式释放 WINBASEAPI VOID WINAPI ReleaseSRWLockExclusive ( __inout PSRWLOCK SRWLock ); // 共享式释放 WINBASEAPI VOID WINAPI ReleaseSRWLockShared ( __inout PSRWLOCK SRWLock );
4、C++封装
#pragma once #include <windows.h> class ncSRWLock { public: ncSRWLock() { InitializeSRWLock(_srwLock); } ~ncSRWLock() { } public: void lock (bool isExclusive = true) { if (isExclusive) { AcquireSRWLockExclusive (_srwLock); } else { AcquireSRWLockShared (_srwLock); } } void unlock (bool isExclusive = true) { if (isExclusive) { ReleaseSRWLockExclusive (_srwLock); } else { ReleaseSRWLockShared (_srwLock); } } private: SRWLOCK _srwLock; };
5、顺藤摸瓜
鸣谢
相关文章推荐
- Scanf的理解
- 以空格截断数据
- ACE的Reactor用法
- javascript实现五星评分功能
- Java Web中hibernate、spring、structs简要说明
- 程序员如何尽快变的稍微专业一点
- GridView添加显示图片导致的view复用问题
- oracle 存储过程,存储函数以及定时器的综合使用
- 重构----学习心得
- thinkphp3.2+PHPExcel导出查询数据到excel表格的实例
- RT: np - new sbt project generation made simple(r)
- 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping
- ViewPager实现禁止滑动功能
- jQuery 实现多页面换肤
- session_unset()和session_destroy()用法分析
- 看懂 Fiddler 的瀑布图 【Timeline】
- 多态机制原理解析--从内存角度分析
- LeetCode Reverse Integer
- iOS xcode7折叠展开全部代码
- iOS,Android服务器间通用的Base64加密解密传递数据