读写者问题

读者-写者问题

问题分析

在这里插入图片描述

  • 允许多个读者进行文件进行读操作
  • 只允许一个写者往文件写信息,也就是写写互斥 写读互斥

问题分析

image-20221028222022796

  • 实现写写互斥很好实现,用一个互斥信号量实现——rw
  • 问题就是出现在读写需要互斥,但是读读之间不需要互斥,对于这种问题,我们采用了一个整数count来实现,就是对于我们的读进程,我们只有在第一个读进程的时候才进行P操作,为的是实现读写进程的互斥,如果再来一个都进程,因为count!=0,所以不会进行P操作 当是最后一个读进程出临界区,会进行V操作
  • 但是我们对Count的操作必须是互斥的,不同的读进程不能同时去访问Count,因为如果因为进程切换,导致两个读进程都读到了Count为0,那么读进程会两次进行P操作,而实现不了读读直接不互斥

在这里插入图片描述

  • 但是这样还是会造成一个问题,如果源源不断的读进程进入,那么可能会导致写进程饿死的问题,因为除了最后一个读进程出临界区资源,其他读进程不会释放资源,所以写进程肯定会饿死

实现读写进程公平

在这里插入图片描述

  • 若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库里不会投三分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值