读写锁

✍ dations ◷ 2025-08-27 09:55:19 #并发控制

读写锁是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。多读者锁,,“push lock”) 用于解决读写问题(英语:readers–writers problem)。读操作可并发重入,写操作是互斥的。

读写锁通常用互斥锁、条件变量、信号量实现。

某些读写锁允许在读模式与写模式之间升降级。

读写锁可以有不同的操作模式优先级:

Michel Raynal(英语:Michel Raynal)使用两把互斥锁与一个整数计数器实现。计数器b跟踪被阻塞的读线程。互斥锁r保护b,供读者使用。互斥锁g (指"global")确保写操作互斥。伪代码:

Begin Read

End Read

Begin Write

End Write

实现是读操作优先。:76

可使用条件变量c与普通的互斥锁m、整型计数器r(表示正在读的个数)与布尔标志g(表示正在写)来实现读写锁。

lock-for-read操作:

lock-for-write操作:

lock-for-read与lock-for-write各自有自己的逆操作。unlock-for-read通过减量r并在r变为0时通知c。unlock-for-write设置w为false并通知c。

SRWLock,见Windows操作系统API,从Windows Vista开始.

读写锁(Slim reader/writer,SRW, lock)用于进程内的线程间同步。 SRW既不是公平的也不是先进先出的。读写锁数据结构的内部实现就是一个指针。读写锁的性能较临界区有很大的提升,这是因为读写锁是基于原子操作,关键段是基于event内核对象的,从用户模式到内核模式的切换占用了大量的时钟周期。相关API:

read-copy-update (RCU)算法是读写锁的一种替代实现。RCU对读操作是无等待。Linux内核实现了很少写操作的一种RCU叫做seqlock。

相关

  • 约瑟·亨利约瑟·亨利(英语:Joseph Henry,1797年12月17日-1878年5月13日)是一位美国科学家,是美国科学振兴会(英语:National Institute for the Promotion of Science)的创始成员之一,也是史密森
  • 波德戈里察波德戈里察(塞尔维亚-克罗地亚语:Подгорица),是欧洲国家黑山首都。南斯拉夫联邦时期(1948年~1992年)时名为铁托格勒。轰炸波德戈里察是第二次世界大战中,同盟国应南斯拉夫
  • Β受体阻滞剂β受体阻断药(英语:Beta blockers),又称Beta受体阻断药、β受体阻断剂、β受体阻滞剂、β受体拮抗剂或β阻断药、乙型阻断剂,是一类用来治疗心律不齐、防止心脏病发作后的二次心
  • 模拟电路模拟电路(英语:analogue electronics,美式:analog electronics)是涉及连续函数形式模拟信号的电子电路,与之相对的是数字电路,后者通常只关注0和1两个逻辑电平。“模拟”二字主要指
  • 手表手表,或称为腕表,是指戴在手腕上、用以计时及显示时间的仪器。几乎是利用皮革、橡胶、尼龙布、不锈钢等材料,制成表带,将显示时间的“表头”束在手腕上。本来作为仪器的“錶”应
  • 应用气象学应用气象学(英语:applied meteorology),是指研究有关专业与气象条件的相互关系及气象学应用于有关专业所形成的各专业气象学的统称。该学科将气象数据、分析、预测技术应用到实
  • 山本五十六山本五十六(日语:山本 五十六/やまもと いそろく Yamamoto Isoroku */?,1884年4月4日-1943年4月18日),日本海军军人,曾留学美国哈佛大学,第二次世界大战期间担任日本海军联合舰队司
  • 金刚山 (朝鲜)坐标:38°39′24″N 128°06′18″E / 38.65667°N 128.10500°E / 38.65667; 128.10500金刚山(朝鲜语:금강산/金剛山)是位于朝鲜民主主义人民共和国江原道的山峰,主峰海拔1,638米
  • 拉里·泰斯勒劳伦斯·高登·泰斯勒(英语:Lawrence Gordon Tesler,1945年4月24日-2020年2月17日),昵称拉里·泰斯勒(Larry Tesler),生于美国纽约州纽约市,计算机科学家,主要研究领域为人机界面。拉里
  • 伊丽莎白·阿列克谢耶芙娜1801年3月23日–1825年12月1日伊丽莎白·阿列克谢耶芙娜(1779年1月24日-1826年5月16日),原名巴登的路易莎,为俄罗斯帝国沙皇亚历山大一世的配偶,成为俄罗斯帝国皇后。在1825年12月