第2章补充习题1参考资料.docxVIP

  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文档。上传文档
查看更多
羇 例 1:抽烟问题:有一个烟草代理商(Agent)和 3 个抽烟者(smoker)。每个抽烟者连续不断地制造香烟并吸掉它。 但是,制造一支香烟需要三种材料:烟草、烟纸和火柴。三个抽烟者中,一人有烟纸,一人有 烟叶,一人有火柴。烟草代理商源源不断地供应这三种材料。他将两种材料一起放在桌上, 持有另一种材料的吸烟者即可制造一支香烟并抽掉它。当此抽烟者抽香烟时,他发出一个信号通知烟草代理商,烟草代理商马上给出另外两种材料, 如此循环往复。 试用信号量同步烟草代理商和 3 个抽烟者。 芄 解: Semaphore smoker[3]; //初始 0,三个抽烟者 膃 Semaphore material[3];//初始 0,三种原料 蕿 Semaphore agent; //初始 1,供应商 莇 Int turn; // 初始 0,轮到谁 肅 Agent: 羁 While (1) { 袁 Wait(agent); 螆 Signal(smoker[turn]); 螅 Signal(material[(turn+1)%3]); 羂 Signal(material[(turn+2)%3]); 羀 Turn=(turn+1)%3; 芅 } 薅 Smoker-i: 肄 While (1) { 肈 wait(smoker[i]); 衿 wait(material[(i+1)%3]); 芆 wait(material[(i+2)%3]); 袁 signal(agent); 蒀 } 莈 肆 例 2;从读卡机上读进 n 张卡片,然后复制一份,要求复制出来的卡片与读进来的卡片完全一致。这一工作由 3 个进程 get、copy、put以及两个缓冲区 buffer1 和 buffer2 完成。 get 进程的功能是把一张卡片信息从读卡机上读进 buffer1;进程 copy 的功能是把 buffer1 中的信息复制到 buffer2;进程 put 的功能是取出 buffer2 中的信息并从行式打印机上打印输出。试用 P、V 操作完成这 3 个进程间的尽可能并发正确执行的关系(用程序或框图表示) ,并指明信号量的初值。 袂解答:这 3 个进程间的关系可用下图来表示: 蕿 get copy put 膇 芃分析这 3 个进程之间的关系,可以得知, get 和 copy 进程之间通 过 buffer1 进行合作,这是一种生产者 -消费者问题;同理,进程 copy 和  put  之间通过  buffer2  进行合作,两者之间也是一种生产者  -消费者 问题。 螁为此,设计互斥信号量 mutex1,mutex2 来实现对 buffer1 和 buffer2 的互斥访问;为实现 get 和 copy 之间的同步,设置两个信号量 semptybuffer1 和 sfullbuffer1 ,分别表示缓冲区 buffer1 是空的还是满的;为实现 copy 和 put 之间的同步,设置两个信号量 semptybuffer2、 sfullbuffer2 ,分别表示缓冲区 buffer2 是空的还是满的。 聿 Var mutex1,mutex2,semptybuffer1,sfullbuffer1,semptybuffer2 , sfullbuffer2:semaphore:=1,1,1,0,1,0; 蚆 Get:begin 羃 Repeat 螂 从读卡机读入一张卡片信息; 膈 P(semptybuffer1); 肆 P(mutex1); 螄 将信息放入 buffer1; 袄 V(sfullbuffer1); 薀 V(mutex1); 蒅 Until false; 蒄 End 蚁 Copy:begin 虿 Repeat 膈 P(sfullbuffer1); 芄 P(mutex1); 螃 从 buffer1 复制信息 ; 肁 V(semptybuffer1); 薈 V(mutex1); 羅 P(semptybuffer2); 薀 P(mutex2); 腿 将信息复制放入 buffer2; 肇 V(sfullbuffer2); 蚅 V(mutex2); 薁 Until false; 芈 End; 蒆 Put:begin 蒅 Repeat 蚃 P(sfullbuffer2); 蚀 P(mutex2); 袆 从 buffer2 取出信息 ; 膆 V(semptybuffer2); 蒀 V(mutex2); 螈把信息从打印机输出; 芅 Until false; 羆 End; 蒁 膁 例 3:在 4×100m 接力赛中, 4 个运动员之间存在如下关系:运动员 1 跑到终点把接力棒交给运动员

文档评论(0)

135****9629 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档