曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5355|回复: 0
打印 上一主题 下一主题

读写锁

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2011-8-9 20:42:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
读写锁 (Read-Write Lock)

对于一段数据,多个线程同时读问题不大。如果假设对这段的操作都不是原子型,那么只要有任何一个线程试图对这段数据修改,那就必须使用同步手段来避免错误。所谓同步,就相当于一种事先约定好的机制。

对于一段读频繁,而写频率比较低的区域,如果使用信号量,互斥量,或者是临界区等机制来同步,尽管可以保证程序正确,但效率会变得很低。而 “读写锁” 可以在这种情况下可以避免这种问题。

对于同一个锁,读写锁有两种获取方式:共享(Shared) 独占(Exclusive) 。当锁处于自由状态时,不管是申请共享还是独占,都能够成功获得锁,获得后,将锁置于对应状态。

如果锁已经处于共享状态,其它线程可以以共享的方式去获取锁且可以获取成功,获取共享锁相当于申请读。
如果锁已经处于共享状态,若有线程试图以独占方式获取,那么它就必须等待锁被所有的线程释放。
如果所已经处于独占状态,那么它将组织任何其它线程以任何形式获取该锁。

读写锁行为总结如下表所示:
读写锁状态
以共享方式获取
以独占方式获取
自由
成功
成功
共享
陈宫
等待
独占
等待
等待
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 07:47 , Processed in 0.061415 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表