读写锁

✍ dations ◷ 2025-10-10 17:39:01 #并发控制

读写锁是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。多读者锁,,“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。

相关

  • 流行性脑脊髓膜炎流行性脑膜炎又名流行性脑脊髓膜炎(Epidemic meningitis),简称流脑。冬春季节是此病的高发期,发病高峰一般出现在每年的3月~4月份。如及早发现,及早治疗,本病治愈率较高。流行性脑
  • 森索夫奥列格·根纳季耶维奇·森索夫(乌克兰语:Олег Геннадійович Сенцов,1976年7月13日-),乌克兰电影制片人、作家、社会活动家。俄罗斯合并克里米亚后,克里米亚
  • 1932年苏联大饥荒1932–33年的苏联大饥荒(俄语:Голод в СССР 1932—1933 годах)发生在苏联的几大产粮区,其中包括了乌克兰、北高加索、伏尔加河流域、哈萨克斯坦、南乌拉尔山脉和
  • 四季之人《四季之人》(英语:A Man for All Seasons)是一套1966年英国传记电影,讲述16世纪英国亨利八世时代著名大臣托马斯·摩尔的故事。此片由佛烈·辛尼曼执导,男主角是保罗·史考菲及
  • 屠粹忠屠粹忠(1629年-1706年),字纯甫,号芝岩,宁波府定海人(今镇海区)。清朝大臣。顺治十五年(1658年)戊戌科进士,康熙四十三年进兵部汉尚书。屠粹忠是金庸小说《鹿鼎记》中人物。
  • 杜蒙德·于维尔儒勒·塞巴斯蒂安·塞萨尔·迪蒙·迪维尔(法语:Jules Sébastien César Dumont d'Urville,1790年5月23日-1842年5月8日)是法国探险家、语言学家、人类学家、海军少将。他一生探
  • 鼓山地岳殿坐标:22°38′10″N 120°16′58″E / 22.6361812°N 120.2827569°E / 22.6361812; 120.2827569 鼓山玉旨地岳殿,又称鼓山东岳殿,主祀东岳仁圣大帝、地藏王菩萨、李府大神,庙宇
  • 费鲁齐欧·兰博基尼费鲁齐欧·兰博基尼(英语:Ferruccio Lamborghini,1916年4月28日-1993年2月20日)为意大利著名超级跑车品牌兰博基尼的创始者。目前,流传有数个版本关于费鲁齐欧·兰博基尼为什么开
  • 秦雯彬https://www.facebook.com/jancvp秦雯彬(1983年7月16日-),英文名为Jan,出生于马来西亚柔佛州古来再也,是一名马来西亚影视女演员。秦雯彬,出生于马来西亚。在2004年参加了马来西亚A
  • 费迪南·福煦普法战争 第一次世界大战费迪南·福煦(Ferdinand Foch,1851年-1929年),法国陆军统帅。父亲为拿破仑·福煦。福煦于普法战争时被征召入伍、进入海军陆战队服役,战后决定留在军队发