曲径通幽论坛
标题:
读写锁
[打印本页]
作者:
beyes
时间:
2011-8-9 20:42
标题:
读写锁
读写锁 (Read-Write Lock)
对于一段数据,多个线程同时读问题不大。如果假设对这段的操作都不是原子型,那么只要有任何一个线程试图对这段数据修改,那就必须使用同步手段来避免错误。所谓同步,就相当于一种事先约定好的机制。
对于一段读频繁,而写频率比较低的区域,如果使用信号量,互斥量,或者是临界区等机制来同步,尽管可以保证程序正确,但效率会变得很低。而 “读写锁” 可以在这种情况下可以避免这种问题。
对于同一个锁,读写锁有两种获取方式:
共享(Shared)
与
独占(Exclusive)
。当锁处于自由状态时,不管是申请共享还是独占,都能够成功获得锁,获得后,将锁置于对应状态。
如果锁已经处于共享状态,其它线程可以以共享的方式去获取锁且可以获取成功,获取共享锁相当于申请读。
如果锁已经处于共享状态,若有线程试图以独占方式获取,那么它就必须等待锁被所有的线程释放。
如果所已经处于独占状态,那么它将组织任何其它线程以任何形式获取该锁。
读写锁行为总结如下表所示:
读写锁状态
以共享方式获取
以独占方式获取
自由
成功
成功
共享
陈宫
等待
独占
等待
等待
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2