曲径通幽论坛

标题: 读写锁 [打印本页]

作者: beyes    时间: 2011-8-9 20:42
标题: 读写锁
读写锁 (Read-Write Lock)

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

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

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

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

读写锁行为总结如下表所示:
读写锁状态
以共享方式获取
以独占方式获取
自由
成功
成功
共享
陈宫
等待
独占
等待
等待





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2