🔺关键:写写互斥,读写互斥,读读不互斥(看出来了吧,写者和谁都互斥)→定义互斥信号量:rw针对文件(漏洞:上锁了之后谁都不能进,这样读读怎么办😣)
于是乎,在写者方面只需循环执行:常规“p临v”。
但在读者‼️我们要再来一个变量,用于识别是读者来了(毕竟读读不上锁吖),就定义为count初始为0,表示当前就一个读者。注意看!这个count必须互斥访问,不然同时来多个读者你怎么能认出只来了一个!ok,我们定义count区的互斥信号量为mutex😎别忘了,只要是互斥信号量,初始值都置1。
在读者方面循环执行:先对count区上锁表示我要访问,然后识别count,如果count等于0,说明来的人是写者,不能给他进,上rw!反之,来的是读者,count先++(加完mutex要解锁)无需设置rw ,读读直接读💑读完count--,如果剪完count为0说明已经是最后一个读者来了,回到上一个rw 上锁的位置。可见下一步我们要解锁让写者可以进来。
一定切记PV操作必须成对出现。
Game Over🤮