- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九题 设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;销售者每次循环从仓库中取出一个产品进行销售。如果不允许同时入库,也不允许边入库边出库;而且要求生产和消费A产品和B产品的件数都满足下关系:-n≤A的件数-B的件数≤m,其中n、m是正整数。
分析:生产者A、B和消费者之间不能同时将产品入库和出库,故仓库是一个资源:-n≤A的件数-B的件数≤m,:-n≤A的件数-B的件数≤m,A的件数-B的件数 A的件数-B的件数;difference==-ndifference==m的时候,不能取产品A,只能取B;-ndifferencem,即可以取产品A也可以取产品B;
答:为了互斥地入库和出库,为仓库设置一初值为1的互斥信号量mutex;为了使生产的产品件数满足-n≤A的件数-B的件数≤m,须设置两个同步的信号量,其中SAB表示当前允许A生产的产品数量,其初值为m,SBA表示当前允许B生产的产品数量,其初值为n;另外,还需设置一个整数difference表示所销售的A、B产品数量之差,而为了同步生产者和销售者并使销售的A、B产品的件数-n≤A的件数-B的件数≤m,还需要设置三个资源信号量,其中对应于仓库中的总的产品量,SA对应于仓库中的A产品量,SB对应于仓库中的B产品量,它们的初值都为0.
Semaphore SAB=m,SBA=n,S=0,SA=0,SB=0,mutex=1;
process A( )
{ while(1)
{//生产产品,-n≤A的件数-B的件数≤m,方法同第4题
wait(SAB);
Produce a product A;
signal(SBA);
//入库操作,满足出入库操作互斥即可
wait(mutex);
add the product A to the storehouse;
signal(mutex);
signal(SA); //入库产品A一件,所以给SA增值
signal((S); //入库产品一件,所以给S增值,S是仓库中全部产品的数量
}
}
process B( )
{ while(1)
{//生产产品,-n≤A的件数-B的件数≤m,方法同第4题
wait(SBA);
Produce a product B;
signal(SAB);
//入库操作,满足出入库操作互斥即可
wait(mutex);
add the product A to the storehouse;
signal(mutex);
signal(SB); //入库产品A一件,所以给SA增值
signal((S); //入库产品一件,所以给S增值,S是仓库中全部产品的数量
}
}
process C( )
{ while(1)
{ wait(S); //首先检查有无产品,无产品阻塞,有产品,下面操作将会取走一件产品,所以S减1
if(difference=-n)
{wait(SA); // difference=-n时只能取A产品一件,无A产品则需阻塞
//出库操作,满足出入库操作互斥
wait(mutex);
take a product A from storehouse;
signal(mutex);
difference++; //取A产品一件,difference++
}
else if(difference=m)
{ wait(SB); // difference=m时只能取B产品一件,无B产品则需阻塞
//出库操作,满足出入库操作互斥
wait(mutex);
take a product B from storehouse;
signal(mutex);
difference--; //取B产品一件,difference--
}
else
{ //-ndifferencem,即可以取产品A也可以取产品B,随意取一件产品出来,之后再根据取得产品是A还是B进行处理
//出库操作,满足出入库操作互斥
wait(mutex);
take a product A 或B from storehouse;
signal(mutex);
if(product_type==A)
{//取的是产品A,则信号量SA减1,这里不可能发生没有A产品,进程C需要阻塞的情况
wait(SA);
difference++;//取A产品一件,difference++
}
else
{//取的是产品B,则信号量SB减1,这里不可能发生没有B产品,进程C需要阻塞的情
您可能关注的文档
最近下载
- 乡镇财政会议管理制度.docx VIP
- 医院预约挂号系统的设计实现.doc VIP
- 2023年河北科技师范学院网络工程专业《数据结构与算法》科目期末试卷B(有答案).docx VIP
- ICU早期康复PPT课件.pptx VIP
- 【高中化学】新人教版必修一基础知识填空(1-4章).doc
- 国开00533_管理会计-机考复习资料.docx
- 国开电大汉语言本科选修课《中国文学基础》无纸化考试(作业练习1至3+期终考试)试题及答案.pdf VIP
- 国际商务-暨南大学-中国大学MOOC慕课答案.pdf
- 2024年大学英语六级考试单词词汇表完整版(复习备考必背).pdf
- 工贸企业主要负责人和安全管理人员考题库专项测试题附答案.doc
文档评论(0)