操作系统之进程管理:14、读者-写者问题

14、读者-写者问题

问题描述

在这里插入图片描述

解题思路

在这里插入图片描述

分析:
无论是写写还是读写互斥都是对文件的互斥访问,需要一个互斥信号量rw,在读和写的前后加入互斥访问
在这里插入图片描述

问题1:但是这样的话无法实现多个读者访问文件的操作;当reader1读时,rw=0;在reader1读的过程中切换到reader2读时,因为rw=0而阻塞。
解决1:用一个计数变量count=0来对读者进程计数,当第一个读者进程开始时加锁,最后一个读者进程结束时解锁
在这里插入图片描述

问题2:当俩个读者进程并发执行时,r1判断完count=0后切换到r2,此时r2认为count=0,加锁;在切换回r1继续执行加锁,这样r1进程就会被阻塞
解决2:产生该问题的原因是由于原因在于对count 变量的检查和赋值无法一气呵成;为了实现一气呵成的操作,需要设置一个互斥的信号量mutex=1来互斥的访问count变量
在这里插入图片描述

问题3:当一直有读者进程到来时,写进程就会“饿死”
解决3:在设置一个互斥的信号量w=1用于实现“读写公平”(或者说“写优先”’)
在这里插入图片描述
分析:
1、读者1–>读者2:r1读执行p(w)后r2阻塞;当r1执行完V(w),后r1读,r2唤醒;俩个进程并发读
2、写者1–>写者2:w1写,w=0,w2在P(w)阻塞
3、写者1–>读者1:w1执行,w=0;读者阻塞在P(w)
4、读者1–>写者1–>读者2:r1读,rw=0,w=1;w1写,w=0,p(rw)阻塞;r2读,P(w)阻塞;当r1结束后,w1唤醒;但r2依旧阻塞;这样就实现了写进程到来后,读完立即执行写进程。
5、写者1–>读者1–>写者2:w1写,w=0;r1读,在p(w)阻塞;w2写,p(w)阻塞;w1写,由于读1先入队,所以执行r1读,w2依旧阻塞;因此,其实他应该叫做“读写公平”比“写优先”更合适。

注意

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值