操作系统中读者与写者问题

问题描述

  1. 计算机中的数据常被若干个并发程序所共享,某些进程可能只希望“读数据”,读完过后,该数据仍然存在且并未发生任何修改,该进程即为“读进程”。同样有一些进程访问数据时,需要对所访问的数据进行修改,原数据将被修改数据替代,不复存在。该类进程即为“写进程”。
  2. 多个读进程可以并发的交替访问共享数据资源,但写进程与读进程(写进程)不能同时访问共享数据资源,这样可能导致数据的不一致。

问题分析

  1. 找出题目中所描述的各个进程,分析它们的互斥、同步关系。
  2. 根据进程的操作流程写出大致的P、V操作。
  3. 设置信号量。通过题目给出的已知的条件确定对应的同步信号量的初值(根据对应资源的多少),互斥信号量的初始值一般设为mutex=1。
  4. 具体分析:
    两类进程:读进程、写进程。
    互斥关系:写进程与读进程、写进程与写进程。
    写进程与任何进程都互斥,设置互斥信号量为wmutex,在写者访问共享资源的前后分别加上P、V操作。因为写者与读者的互斥,在共享资源时,也会执行P(wmutex)操作,这样就会导致后续的读者一直处于阻塞状态。如何防止该类事件的发生呐?我们可以让第一个访问资源的读进程占用该资源,最后一个访问的读进程释放该资源,通过变量count来记录访问共享数据读进程的个数。这样就可以解决多个读进程可以共享同一数据资源了。

问题实现

读者-写者问题可分为3种情况实现:

  1. 读者优先
  2. 写者优先
  3. 公平竞争
    读者优先
    信号量的设置
    读、写进程操作
    写者优先
    信号量设置
    读、写进程操作
    公平竞争
    信号量设置
    读、写进程操作

总结

读者-写者问题为我们解决复杂的互斥问题提供了参考思路。它对共享资源的访问类型分成两类:读操作和写操作。对于进行读操作的进程,其对共享资源的访问时共享式的;对于进行写操作的进程,其对共享资源的访问是互斥的,且读、写操作也需互斥,否则将导致数据的不一致。

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值