习题课(一) PV操作的应用.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题课(一) PV操作的应用

习题课(一) PV操作的应用 PV原语的含义 P:passeren pass V:verhoog increment P操作和V操作是不可中断的程序段,称为原语。 PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。 PV原语的含义 信号量S是一整数 P(S)原语操作的动作是: (1)S减1; (2)若S减1后仍大于或等于零,则进程继续执行; (3)若S减1后小于零,则该进程被阻塞后进入与该 信号相对应的队列中,然后转进程调度。 V(S)原语操作的动作是: (1)S加1; (2)若相加结果大于零,则进程继续执行; (3)若相加结果小于或等于零,则从该信号的等待 队列中唤醒一等待进程,然后再返回原进程继续执 行或转进程调度。 用PV操作实现进程的互斥与同步 解决此类问题的一般方式: 根据问题给出的条件,确定进程有几个或几类; 确定进程间的制约关系——是互斥,还是同步; 各相关进程间通过什么信号量实现彼此的制约,标明信号量的含义和初值; 用PV操作写出相应的代码段 验证代码的正确性:设以不同的次序运行各进程,是否能保证问题的圆满解决,切忌按固定顺序执行各进程。 苹果桔子问题 桌上有一只盘子,每次只能放入一只水果;爸爸专 向盘子中放苹果(apple),妈妈专向盘子中放桔子 (orange),一个儿子专等吃盘子中的桔子,一个女 儿专等吃盘子里的苹果。请用P、V操作实现爸爸、 妈妈、儿子、女儿四个并发进程的同步与互斥。 苹果桔子问题 解: sp:semaphore; /* 盘子里可以放几个水果 */ sg1:semaphore; /* 盘子里有桔子 */ sg2:semaphore; /* 盘子里有苹果 */ sp := 1; /* 盘子里允许放一个水果*/ Sg1:= 0; /* 盘子里没有桔子 */ sg2 := 0; /* 盘子里没有苹果*/ cobegin 苹果桔子问题 process father begin L1:削一个苹果; 盘子为空吗? 把苹果放入plate; 女儿可以拿苹果; goto L1; end; process daughter begin L4: 盘子里有苹果吗? 从plate中取苹果; 盘子又为空; 吃苹果; goto L4; end; 苹果桔子问题 process mother begin L2:剥一个桔子; 盘子为空吗? 把桔子放入plate; 儿子可以拿桔子; goto L2; end; process son begin L3: 盘子里有桔子吗? 从plate中取桔子; 盘子又为空; 吃桔子; goto L3; end; 苹果桔子问题: process father begin L1:削一个苹果; P(sp); 把苹果放入plate; V(sg2); goto L1; end; process mother begin L2:剥一个桔子; P(sp); 把桔子放入plate; V(sg1); goto L2; end; 苹果桔子问题: process son begin L3: P(sg1); 从plate中取桔子; V(sp); 吃桔子; goto L3; end; process daughter begin L4: P(sg2); 从plate中取苹果; V(sp); 吃苹果; goto L4; end; 缓冲问题(一) 有三个并发进程R,M和P,它们共享一个缓冲区B。 进程R负责从输入设备读入一条记录,每读一条记 录后把它存放在缓冲区B中;进程M在缓冲区B中加 工进程R存入的记录;进程P把加工后的记录打印输 出。缓冲区B每次只能存放一条记录,当记录被加 工输出后,缓冲区B中才可存放另一条新记录。请 用P,V操作作为同步机制来描述它们并发执行时能正 确工作的程序。 缓冲问题(一) 解: begin R,M,P:semaphore; R:=1;M:=P:=0; cobegin 缓冲问题 进程R L1: 从输入设备中读取一条记录; P(R); 将读入记录存入缓冲区; V(M); goto L1 进程M L2: P(M); 对缓冲区中的数据信息进行加工,并将其存入缓冲区中;

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档