[讨论] Readers–writer lock

楼主: sb710031 (@@)   2016-12-05 16:28:35
查了一下 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 卡住的情境
请多多指教 谢谢
作者: Caesar08 (Caesar)   2016-12-05 16:38:00
其实你可以写个程式测测看
作者: CoNsTaR ((const *))   2016-12-05 16:48:00
真的必须严谨的话还是找个 proof assistant 来证一下吧…

Links booklink

Contact Us: admin [ a t ] ucptt.com