《进程同步作业.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.有一个理发师,一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当一个顾客到来时,必须唤醒理发师,进行理发;如果理发师正在理发时,又有顾客来到,则如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开。使用wait和signal操作实现理发师和顾客的行为。要求不能带有竞争条件。 #define CHAIRS /* 为等候的顾客准备的椅子数 */ semaphore customers=0; semaphore barbers=O; semaphore mutex=1; /* 用于互斥 */ int waiting=0; void barber() { while (1) { wait(customers); wait(mutex); waiting=waiting-1; signal(barbers); signal(mutex); 理发; } } void customers() { wait(mutex); if(waitingCHAIRS) { waiting=waiting+1; signal(customers); signal(mutex): wait(barbers); 坐下等待; } else { signal(mutex); } } 2.计算进程PC和打印进程P01、P02共享一个单缓冲区,计算进程负责计算,并把计算结果放入单缓冲中;打印进程P01、P02则负责从单缓冲中取出计算结果进行打印,而且对每个计算结果,P01和P02都需分别打印一次。请用记录型信号量描述上述进程间的同步关系。 Var empty1,enpty2,full1,full2: semaphore:=1,1,0,0; begin Parbegin PC:begin Repeat compute next number; wait(empty1): wait(empty2); add the number to bufer; signal(full1); signal(full2); Until false; end P01: begin repeat wait(full1); take from bufer; signal(emptyl): print last number; until flase; end P02:begin Repeat wait(full2); take from buffer; signal(empty2); print last number; until false end parend end 3.有座东西方向架设、可双向通行的单车道简易桥,最大载重负荷为4辆汽车。请定义合适的信号量正确使用wait操作、signal操作,实现双向车辆的过桥过程。 设置4个信号量: Mutex:表示桥的互斥使用的信号量,初值为1; Scounteast:表示由东向西方向的车辆计数器的互斥使用的信号量,初值为1; Scountwest:表示由西向东方向的车辆计数器的互斥使用的信号量,初值为1; Scount4:表示桥上车辆计数器的信号量,初值为4。 算法过程如下: semaphore Mutex,Scounteast,Scountwest,Scount4; int Counteast,Countwest; Mutex=1;Scounteast=1;Scountwest=1;Scount4=4; Counteast=0;Countwest=0; void P-east() { wait(Scounteast); if (Counteast= =0) wait(Mutex); Counteast++; signal(Scounteast); wait(Scount4); 过桥; signal(Scount4); wait(Scounteast); Counteast--; if (Counteast= =0) signal (Mutex); signal(Scounteast); } void P-west() { wait(Scountwest); if (Countwest = =0) wait(Mutex); Countwest ++;

文档评论(0)

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

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

1亿VIP精品文档

相关文档