[OS同步例题.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文档。上传文档
查看更多
[OS同步例题

1.某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为3个。每次入、取缸水仅为一桶,且不可同时进行。试给出有关取水、入水的算法描述。 semaphore well=1;用来互斥地访问水井 semaphore vat=1;用来互斥地访问水缸 semaphore empty=10;水缸中剩余的空间能容纳的水的桶数 semaphore full=0;水缸中的水的桶数 semaphore pail=3;用来互斥地访问临界资源水桶 old_monk(){ 老和尚进程 while (1) { wait(full); 等待水缸有水 wait(pail); 请求一个水桶资源 wait(vat); 请求使用水缸 use pail to get water from vat; 从水缸里打水 signal(vat); 归还水缸的使用权 signal(empty); 水缸的空闲容量加一 drink water in the pail; 喝水桶里的水 signal(pail); 归还水桶 } } little_monk() { 小和尚进程 while (1) { wait(empty); 等待水缸有空的容量 wait(pail); 请求一个水桶资源 wait(well); 请求井的使用权 use pail to get water from well; 从井里打水 signal(well); 归还井的使用权 wait(vat); 请求水缸的使用权 pour water to the vat; 把水倒入水缸 signal(vat); 归还水缸的使用权 signal(full); 水缸里的水的容量加一 signal(pail); 归还水桶 } } 2.理发店有一名理发师,还有一把理发椅和几把座椅,等待理发者可坐在上面。如果没有顾客到来,理发师就坐在理发椅上打盹。当顾客到来时,就唤醒理发师。如果顾客来到时理发师正在理发,该顾客就坐在椅子上排队;如果满座了,他就离开这个理发店,到别处去理发。 semaphore customers=0;理发师私用信号量,理发师看是否有顾客,可否理发(或用来记录等候理发的顾客数,不包括正在理发的顾客) semaphore barbers=0;顾客私用信号量,顾客看是否有理发师,可否被理发(或等候顾客的理发师数) 因为椅子坐满后,顾客离去,而不是等待,所以不用为椅子数设信号量,而用一个整型变量waiting记录等候理发的顾客数,如果顾客来时发现waiting=座椅数,则离去,而不是阻塞,初值为0。 再设一个公用信号量mutex=1,用于对waiting变量的互斥操作。 #define CHAIRS 5 椅子数为5 void barber() { while (TRUE) { wait(customers); 如果没有顾客,则理发师打瞌睡 wait(mutex); waiting--; signal(barbers); 一个理发师准备理发,唤醒一个等待的顾客 signal(mutex); cut_hair(); 理发 } } void customer() { wait(mutex); if (waitingCHAIRS) { 还有空椅子 waiting++; signal(customers); 若有必要,唤醒理发师 signal(mutex); wait(barbers); 如果理发师正在忙,则顾客打瞌睡 get_haircut(); } else signal(mutex); ?店 3.有一间酒吧里有3个音乐爱好者队列,第一队的音乐爱好者只有随身听,第二队的只有音乐磁带,第三队只有电池。而要听音乐就必须随身听、音乐磁带、电池这3件物品俱全。酒吧老板一次只出售这3种物品中的任意两种。当一名音乐爱好者得到这3种物品并听完一首乐曲后,酒吧老板才能再一次出售这3种物品中的任意两种,于是下一个音乐爱好者得到这3种物品,并开始听乐曲,全部买卖就这样

文档评论(0)

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

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

1亿VIP精品文档

相关文档