vs2010对于读写锁技术的分离,很实用的c+新特性
来源:互联网 发布:函数图像绘制软件 编辑:程序博客网 时间:2024/05/20 13:16
读写锁技术的分离 c++
原著博客这么长长的看着眼痛,其实很明白的一件事情,原来锁的问题是一个人在读,另外的人都不能读,叫CriticalSection,后来来了一种锁,可以只再写的时候,把变量锁上,读的时候,跟其他线程之间的读者之间是不锁的,只对想写的人是锁住的。vs2010后的东西,好东西但是知道的人不多
Slim读/写锁
SRWLock的目的和关键段相同,对一个资源进行保护,构造了一段“原子访问”的代码,不让其他线程访问它。但与关键段不同的是SRWLock允许区分想要读取资源值的线程和想要写入资源值的线程,因为仅仅读取资源是不会破坏数据的,下面是Slim读/写锁的简单用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SRWLOCK g_srwLock
...
//init SRWLock
InitializeSRWLock(&g_srwLock);
...
//当需要写入资源的时候申请"排他锁"
AcquireSRWLOckExclusive(&g_srwLock);
//执行写入动作
...
//写入结束后释放"排他锁"
ReleaseSRWLockExclusive(&g_srwLock);
//-----------------------------------------
//当需要读取时申请"共享锁"
AcquireSRWLockShared(&g_srwLock);
//执行读操作
...
//读取结束后释放"共享锁"
ReleaseSRWLockShared(&g_srwLock);
//系统会自动清理g_srwLock,没有别的清理函数
可以看到,存在两种锁用于此机制:"排他锁"和"共享锁"。排他锁需要任何中锁都不存的情况下才能返回,否则阻塞;共享锁在没有排他锁的情况下就可以返回,哪怕有其他共享锁也没关系。这样在写操作之前申请排他锁,在读之前申请共享锁就可以保证共享资源数据不会被意外破坏。另外,只有初始化函数而没有释放函数。
看似SRWLock更关键段十分相似,但相比关键段SRWLock缺乏下面两个特性:
1、不存在对应的TryEnterXXX函数,如果锁已被占用那么只能选择阻塞调用线程;
2、不能递归的获得SRWLock。也就是说一个线程不能为了多次写入资源而多次锁定资源。而关键段可以做到。回想一下,因为关键段在Enter的时候将判断当前线程是否是共享资源的占有者,如果是则会“放行”,并增加引用计数。然而SRWLock始终不关心调用线程是谁。
0 0
- vs2010对于读写锁技术的分离,很实用的c+新特性
- smarty3的一些实用的新特性
- VS2010中vb.net的新特性
- java7 实用的新特性:编程技巧
- 对于前后端分离技术的理解和实现
- 对于前后端分离技术的理解和实现
- 读写锁的特性
- 读写锁的特性
- 读写锁的特性
- C 99的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- Android去除启动时黑屏
- AssetBundle在安卓中的解析的教程
- CSS盒子模型
- Android OnTouchEvent OnTouchListner 方法区别
- 基于MVP开发模式的简单Android项目
- vs2010对于读写锁技术的分离,很实用的c+新特性
- 关于web.xml里的filter的url-pattern配置问题
- android ScrollView嵌套listview的一些问题
- 直角三角形 纪中2543 枚举+hash
- xutils3框架之数据库使用详解!
- CTP源码分析4 CTP链路质量估计层结构及源码分析(三)----源码头文件解读
- 向量点乘相关公式推导及 几何解释
- TCP/IP、Http、Socket的区别
- linux常用脚本