4信号量答案.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文档。上传文档
查看更多
4信号量答案

第一部分2、该方法对可抢占调度完全没问题。事实上,它就是为这种情况设计的。当调度为不可抢占的,该方法将会失败。假设turn初值为0,而进程1首先运行。它将一直循环,永不释放CPU。3、对于内核线程,线程可以在信号量上阻塞,而内核可以运行该进程中的其它线程。因而,使用信号量没有问题。而对于用户级线程,当某个线程在信号量上阻塞时,内核将认为整个进程都被阻塞,而且不再执行它。因此,进程失败。4、某商店有两种食品A和B,最大数量各为m个。该商店将A、B两种食品搭配出售,每次各取一个。为避免食品变质,遵循先到食品先出售的原则。有两个食品公司分别不断地供应A、B两种食品(每次一个)。为保证正常销售,当某种食品的数量比另一种的数量超过k(k小于m)个时,暂停对数量大的食品进货。试用P、V操作解决上述问题中的同步和互斥关系。4、参考答案#define Max m /*最大数量*/typedef int semaphore;/*初始化*/semaphore A_full = 0; /*商店中A食品数目假设初始值为0*/semaphore B_full = 0; /*商店中B食品数目假设初始值为0*/semaphore A_empty = Max; /* A可缓冲数目 */semaphore B_empty = Max; /* B 可缓冲数目 */semaphore A_minus_B = k; /* 商店中 A超过 B的数目初始值为 k-(A_full – B_full) */semaphore B_minus_A = k;/* 商店中 B超过 A 的数目初始值为 k- (B_full – A_full) */Queue Q_A,Q_B; /*先进先出的队列模拟商店中两食品资源*/semaphore QA_mutex = 1; /*队列A互斥量*/semaphore QB_mutex = 1; /*队列B互斥量*//* 商店搭配出售 A B进程*/void Shop_A_B () /*商店出售A B进程两食品搭配出售*/{A a;B b;while(1){P(A_full);P(B_ful);P(QA_mutex);a = Q_A.remove_item(); /*从商店中取出A*/V(QA_mutext);P(QB_mutex)b = Q_B.remove_item();/*从商店中取出B*/V(QB_mutex);V(A_empty);V(B_empty);sell(a,b); /*卖出 a,b*/}}/*总结:相当于生产者消费者问题中的消费者,首先执行将A,B中的空槽减一,然后开始临界区操作,此处分别有两种商品,因此分别有QA-mutex和QB_mutex两个互斥量。同时,为满足题目中先到先出的要求,采用队列的方式取出商品。完成临界区操作后,执行V(A_empty)和V(B_empty)操作。*//*食品公司向商店提供A 进程*/void Stock_A() /*进货A*/{A a;while(1){a = getA();P(A_empty);P(A_minus_B); //the key of this problemP(QA_mutex);Q_A.insert_item(a);V(QA_mutex);V(A_full);V(B_minus_A);}}/*总结:相当于生产者消费者问题中的生产者,每次先生产一个产品,首先将空槽的数量减少一个,由于A产品数量增加了一个,所以A减B的量的允许值也少了一个(与k比较)。然后开始临界区操作,使用QA_mutex来对A产品有关的临界区访问进行互斥。最后将满槽的数目加一,由于B相对于A减一,故允许的B减A的差值加一*//*食品公司向商店提供B 进程*/void Stock_B() /*进货B*/{B b;While(1){b = getB();P(B_empty);P(B_minus_A);P(QB_mutex);Q_B.insert_item(b);V(QB_mutex);V(B_full);V(A_minus_B);}}第4题总结:(1)主要是模仿生产者消费者问题,相当于两个生产者一个消费者的问题(2)涉及到了两个不同商品的临界区访问,主要是确定临界区操作所涉及的具体对象。同时,当涉及先进先出问题时,优先考虑队列操作5、考虑具有如下特征的共享资源:(1)当使用该资源的进程小于3个时,新申请资源的进程可以立刻获得资源;(2)当三个资源都被占用后,只有当前使用资源的三个进程都释放资源后,其他申请资源的进程才能够获得资源。由于需要使用计数器来记录有多少进程正在使用资源和等待资源,而这些计数器自身也需要互斥执行修改动作的共享资源,所以可以采用如下的程序:1 semaphore mutex = 1, b

文档评论(0)

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

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

1亿VIP精品文档

相关文档