操作系统读者写者问题(备考研中)

文章讨论了在处理文件访问时如何实现读写互斥,特别是在多读者场景下。通过引入互斥信号量mutex和计数器count,确保写者与所有读者之间的互斥以及多个读者间的非互斥。读写操作前需要对count区进行互斥访问,当count为0时,表示有写者到来,否则表示有读者到来。读者增加count并读取,完成后减少count,当count降为0时释放锁,允许写者进入。整个过程强调PV操作的配对使用。
摘要由CSDN通过智能技术生成

🔺关键:写写互斥,读写互斥,读读不互斥(看出来了吧,写者和谁都互斥)→定义互斥信号量: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🤮

8a36cfa5d9b0401d81b367170b28f3f7.png

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值