信号量与PV操作课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
售票问题 汽车司机与售票员之间必须协同工作,一方面只有售票员把车门关好了司机才能开车,因此,售票员关好门应通知司机开车,然后售票员进行售票。另一方面,只有当汽车已经停下,售票员才能开门上下客,故司机停车后应该通知售票员。假定某辆公共汽车上有一名司机与两名售票员,汽车当前正在始发站停车上客,试用信号量与P、V操作写出他们的同步算法。 学习材料 * 售票问题 学习材料 * 银行业务问题 某大型银行办理人民币储蓄业务,由n个储蓄员负责。每个顾客进入银行后先至取号机取一个号,并且在等待区找到空沙发坐下等着叫号。取号机给出的号码依次递增,并假定有足够多的空沙发容纳顾客。当一个储蓄员空闲下来,就叫下一个号。请用信号量和P,V操作正确编写储蓄员进程和顾客进程的程序。 学习材料 * 银行业务问题 学习材料 * 吸烟者问题 一个经典同步问题:吸烟者问题(patil,1971)。三个吸烟者在一个房间内,还有一个香烟供给者。为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供给者有丰富货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸和第三个有自己的火柴。供给者随机地将两样东西放在桌子上,同意一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供给者,供给者再把两样东西放在桌子上,唤醒另一个吸烟者。试采纳:(1)信号量和P、V操作,(2)管程编写他们同步工作的程序。 学习材料 * 吸烟者问题 一个经典同步问题:吸烟者问题(patil,1971)。三个吸烟者在一个房间内,还有一个香烟供给者。为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供给者有丰富货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸和第三个有自己的火柴。供给者随机地将两样东西放在桌子上,同意一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供给者,供给者再把两样东西放在桌子上,唤醒另一个吸烟者。试采纳:(1)信号量和P、V操作,(2)管程编写他们同步工作的程序。 学习材料 * 吸烟者问题 学习材料 * 缓冲区治理 有n个进程将字符逐个读入到一个容量为80的缓冲区中(n1),当缓冲区满后,由输出进程Q负责一次性取走这80个字符。这种过程循环往复,请用信号量和P、V操作写出n个读入进程(P1, P2,…Pn)和输出进程Q能正确工作的的动作序列。 学习材料 * 缓冲区治理 学习材料 * 有假设干种方法可预防这类死锁 上述解法可能出现永远等待,有假设 干种方法可预防死锁: ?至多同意四个哲学家同时取叉子; ?奇数号先取左手边的叉子,偶数号先取右手边的叉子; ?每个哲学家取到手边的两把叉子才吃,否则一把叉子也不取。 学习材料 * semaphore fork5]; for (int i=0;i5;i++) forki]= 1; semaphore room=4; //增加一个侍者 cobegin process philosopher_i( ){/Xi=0,1,2,3 X/ while(true) { think( ); P(room); //操作最多同意4为哲学家取叉子 P(forki]; P(fork(i+1)%5) ; eat( ); V(forki]); V(fork(i+ 1% 5); V(room); } } coend 哲学家吃通心面问题的其他正确解 学习材料 * void philosopher (int i) { if i mod 2==0 then { P(forki]); //偶数哲学家先右手 P(fork(i+1) mod 5 ]); //后左手 eat(); V(forki]); V (fork(i+1) mod 5]); } else { P (fork(i+1) mod 5 ]); //奇数哲学家,先左手 P (forki]); //后右手 eat(); V(fork(i+1) mod 5]); V(forki]); } } 学习材料 * * 例:哲学家问题的Petri描述 h-hunger k-thinking f –fork/chopstick e-eating 无死锁的解法 (1) 增加一个效劳生 (2) 设定规则:奇数先拿左手, ,偶数先拿右手 释放筷子 猎取筷子 学习材料 信号量解决生产者消费者问题 ①一个生产者、一个消费者共享一个缓冲区 ②多个生产者、多个消费者共享多个缓冲区 学习材料 * 一个生产者、一个消费者共享一个缓冲区的解 int B; semaphore empty; //可以使用的空缓冲区数 semap

文档评论(0)

喵公文 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档