ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

经典进程同步问题

2021-09-21 12:00:16  阅读:162  来源: 互联网

标签:readcount 进程同步 写者 Bi 问题 互斥 wrt mutex 经典


在多道程序环境下,进程同步问题十分重要,也是相当有趣的问题,因而吸引了不少学者对它进行研究,由此产生了一系列经典的进程同步问题,其中较有代表性的是 “生产者-消费者问题” 、“读者-写者问题” 、 “哲学家进餐问题” 等等。通过对这些问题的研究和学习,可以帮助我们更好地理解进程同步概念及实现方法。

读者-写者问题

所谓“读者-写者(Reader-Writer Problem)问题“,是指保证一个Writer进程必须与其它进程互斥地访问共享对象的同步问题。

举例

设某航空公司有2个售票处,它们通过远程终端访问设在公司总部的航空订票系统,并要查询或修改系统中记录所有班机当前订票数的数据库B。
设Bi为某班机的当前订票数,P1和P2分别代表2个售票处的售票进程,R1和R2为进程执行时使用的工作寄存器。由于售票进程并发执行,且各自访问数据库B的时间是随机的,故有可能出现下面的访问序列(假定Bi的当前值为x):
P1:R1:=Bi
R1:=R1+1
P2:R2:=Bi
R2:=R2+1
Bi:=R2
P1:Bi:=R1
可见,Bi的新值是X+1,而不是正确的X+2。这里的P1和P2均为写者,显然,对于写者Bi为临界资源,因此写者应该互斥。

读者进程与写者进程的一般结构:

var mutex,wrt:psem;
  readcount:integer;
  seminit(mutex.v,1;wrt.v,1);
  readcount:=0;
cobegin
  procedure reader;
  begin
     P(mutex);
     readcount:=readcount+1;
        if readcount=1 then P(wrt);
     V(mutex);
reading is perfermed;
      P(mutex);
   readcount:=readcount-1;
   if readcount=0 then V(wrt) ;
      V(mutex);
      end;
Procedure writer;
  begin
         P(wrt);
          writing is perfermed;
          V(wrt);
  end;
  coend;

⑴ 确定进程数和进程间的关系
⑵ 确定互斥和同步的规则
⑶ 确定同步、互斥的操作流程
⑷ 确定同步和互斥的信号量
⑸ 确定同步和互斥的信号量的初值
⑹ 确定同步和互斥的PV 操作的位置
⑺ 用类Pacal 语言或其它语言描述同步或互斥算法。

练习

桌上有个能盛得下五个水果的空盘子。爸爸不停地向盘中放苹果或桔子,儿子不停地从盘中取出桔子享用,女儿不停地从盘中取出苹果享用。规定三人不能同时从盘子中取放水果。
从参考选项中,选择正确选项序号,填入用信号量实现爸爸、儿子、女儿这三个循环进程同步的算法的空白处。
为了描述上述同步问题,可定义如下的信号量:
semaphore empty=5, orange=0, apple=0, mutex=1;
爸爸、儿子、女儿的算法分别为:
在这里插入图片描述

儿子女儿进程
在这里插入图片描述

参考选项:

① wait(empty); ② signal(empty);
③ wait(mutex); ④ signal(mutex);
⑤ wait(orange); ⑥ signal(orange);
⑦ wait(apple); ⑧ signal(apple).

参考答案

a ① b ③ c ④ d ⑥ e ⑧ f ⑤ g ③ h ④ i ② j ⑦ k ③ l ④ m ②
欢迎大家加我微信交流讨论
在这里插入图片描述

标签:readcount,进程同步,写者,Bi,问题,互斥,wrt,mutex,经典
来源: https://blog.csdn.net/weixin_45962068/article/details/120400131

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有