第2章补充题1(1.docVIP

  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个进程间的关系可用下图来表示: buffer1buffer2打印机读卡机 get copy put buffer1 buffer2 打印机 读卡机 分析这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跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100m后交棒给运动员3;运动员3也只有接到运动员2传来的接力棒后才能往前跑,他跑完100m后交棒给运动员4;运动员4接棒后跑完全程,试用信号量机制进行描述。 分析:在本题中,4个运动员相当于4个进程

文档评论(0)

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

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

1亿VIP精品文档

相关文档