读者-写者问题

读者-写者问题

一、问题背景及分析

有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。因此要求:

  1. 允许多个读者可以同时对文件执行读操作
  2. 只允许一个写者同时往文件中写信息
  3. 任一写者在完成写操作之前不允许其他读者或写者工作(读进程与写进程同时共享数据,可能导致读出的数据不一致的问题)
  4. 写者执行写操作前,应让已有的读者和写者全部退出

二、问题实现

(一)对 seamaphore mutex = 1 的解释

image

否则当第一个读进程执行完 if(count == 0) P(rw); 后切换到第二个读进程后会导致第二个进程的 P 操作阻塞,无法同时读。

(二)对 semaphore w = 1 的解释

注:实际上 semaphore w = 1 实现了读进程和写进程的先来先服务的队列

image

否则假如源源不断有读进程加入,则写进程陷入饥饿。

三、问题思考

  • 该问题的核心思想在于设置了一个计数器 count 用来用来记录当前正在访问共享文件的读进程数。我们可以用 count 的值来判断当前进入的进程是否是第一个/最后一个读进程,从而做出不同的处理。
  • 对 count 变量的检查和赋值不能一气呵成导致了一些错误,如果需要实现“一气呵成”,自然应该想到用互斥信号量。
  • 对写进程饥饿的问题解决
posted @   Wind_730  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示