作者sb710031 (@@)
看板C_and_CPP
标题[讨论] Readers–writer lock
时间Mon Dec 5 16:28:35 2016
查了一下 wiki 只有给 Read-preferring RW locks
而查了一下其它的 好像非 Read-preferring RW locks 都相当复杂
(如:
http://lass.cs.umass.edu/~shenoy/courses/fall08/lectures/Lec11.pdf)
所以自己想了一个方法 想请教是否会有问题
基本上 有一个 mutex g 当locked时 表示有人在写或有人想写在等
有一个 atomic integer b 表示在读的人数
http://imgur.com/a/eTzXW
重点在於 start read 结束时 reader 对b+=1 而且做完这个动作後 看到g 是unlocked的
这会确保 如果有比这个read 还早想 write的人 这个read就会等到那个write结束
才read 所以不会 read-preferring 不过似乎有一点 write-preferring
因为当 write的一结束 一堆read做b++的动作如果不够快 就会要等下一个 write
所以应该是适合 write 少但重要 不能被read 卡住的情境
请多多指教 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.167.42
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1480926518.A.3D4.html
1F:→ Caesar08: 其实你可以写个程式测测看 12/05 16:38
有写了 不过怕有太特别的例外
※ 编辑: sb710031 (140.113.167.42), 12/05/2016 16:42:49
2F:推 CoNsTaR: 真的必须严谨的话还是找个 proof assistant 来证一下吧… 12/05 16:48