- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
生产者 -- 消费者题型
三、生产者—消费者题型
生产者 --- 消费者题型在各类考试(考研、程序员证书、
程序员面试笔试、 期末考试) 很常见,原因之一是生产者 --- 消费者题型在实际的并发程序(多进程、多线程)设计中很常见;之二是这种题型综合性较好,涉及进程合作、互斥,有时还涉及死锁的避免。生产者 --- 消费者题型可以全面考核你对并发程序的理解和设计能力。
生产者 --- 消费者题型最基本的是有界缓冲区的生产者
消费者问题和无界缓冲区的生产者 --- 消费者问题, 对这两个问题的解我们应该背下来, 就像我们念高中时背一些题型一样。
1 有界缓冲区生产者 - 消费者问题的解前面的课程已多次讲
过。假设缓冲区是无界的,试用信号灯 与 PV 操作给出解法。
答:由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞。所以只需在前面的有界缓冲区解中去掉信号量 empty 及有关的 PV操作即可。
设有一个可以装 A,B 两种物品的仓库,其容量无限大,但要求仓库中 A,B 两种物品的数量满足下述不等式:
M ≤A 物品的数量 - B 物品的数量≤ N,其中 M 和 N 为正整数。
试用信号灯和 PV 操作描述 A, B 两种物品的入库过程。(这是北大 1991 年研究生入学试题, 原题不允许使用条件表达式,解法 1 虽正确,但不符合原题要求)
解 1:不等式 - M ≤ A 物品的数量 - B 物品的数量≤ N 意味着:
A 物品的数量 - B 物品的数量≤ N
B 物品的数量 - A 物品的数量≤ M
为防止缓冲区存入物品可能发生共享变量错误, A 、
入库时需要互斥。解法 1
ItemType *buffer; //仓库空间
semaphore mutex=1;
int countA=0, countB=0; //A , B 物品初值
void putA { void putB {
while(1){ while(1){
P(mutex); P(mutex);
if (countA - countB)N if (countB - countA)M
{ {
*buffer=A; //A 入 *buffer=B; //B 入库
库 buffer++;
buffer++; countB++;
countA++; }
} V(mutex);
V(mutex); } }
} }
解法 1 借助条件表达式, 用简单的互斥解题, 与生产者
消费者题型毫无关系。
解法 2:不使用条件表达式的解法。对于下面表达式 A 物品的数量 - B 物品的数量≤ N
B 物品的数量 - A 物品的数量≤ M
可以这样理解:
1)若只放 A 而不放 B,则 A 最多放 N 次便被阻塞,即假定有一个初值为 N 的信号量 S1,A 进程每操作一次就相当将信号量 S1 减 1。当 S0 时, A 不能再放,此时每放入
3
一个 B(相当于 B 消费了一件产品) ,可令 S1 的信号量加1,此时 A 有再放的机会。此时 A 是生产者 B 是消费者。
( 2)对 B 同理。即假定有一个初值为 M 的信号量 S2。。。
此时 B 是生产者 A 是消费者。
用这种解题思路,这道题就可归类于生产者 ---- 消费者问
题。下面我们用思路( 1)解这道题。
可以认为有一个有界缓冲区,大小为 abs(N-M) ,
A 是生产者,缓冲区下界是 M ,其信号量 S1=M B 是消费者,缓冲区上界是 N,其信号量 S2=N
下面是生产者进程 A
ItemType *buffer;
semaphore s1=N, s2=M, mutex=1;
void putA {
while(1){
P(s1) //生产一件 A
P(mutex);
*buffer=A;
buffer++;
V(mutex);
V(s2) //通知 B 进程
}
}
下面是消费者进程 B
void putB {
while(1){
P(s2) //生产一件 B
P(mutex);
*buffer=B;
buffer++;
V(mutex);
V(s1) //通知 A 进程
4
}
}
对这道题,我是从生产者 ---- 消费者题型来理解的,同
学们可能有不同思路。这道题的解与生产者 ---- 消费者
标准解法的差别在于信号量初值的设定上。
后面这个解,把信号量 mutex 和 buffer++ 去掉也可以,因为这个题只要主要考点不在于互斥。
5
3.
设自行车生产线上有一只箱子,其中有
N
个位置
( N
≥ 3) ,每个位置可存放一个车架或一个车轮
; 又
设有三个工人,其活动分别为
:
工人 1 活动:
工人 2
活动:
工人 3
活动:
do {
do {
do {
加工一个车架 ;
加工一
您可能关注的文档
- 火灾自动报警设备的使用及其维护保养.docx
- 点号的一般书写格式.docx
- 烧伤整形科健康教育.docx
- 热力学第二定律的建立.docx
- 热力除氧器说明书.docx
- 热处理炉设备鉴定规范.docx
- 焊工高级理论知识及答案.docx
- 煤电化一体化循环经济工业园区总体规划方案.docx
- 煤矿供电系统设计.docx
- 煤矿危险源辨识风险评估及管控基本流程.docx
- 工会代表大会运行规则及十大制度解读.docx
- 法院合同法案例分析与学习笔记.docx
- 医疗急救口头医嘱管理流程制度.docx
- 幼儿园科学实验教学设计案例.docx
- 2025秋九年级英语全册Unit2Ithinkthatmooncakesaredelicious课时3SectionAGrammarFocus_4c习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit5WhataretheshirtsmadeofSectionA合作探究二课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit2Ithinkthatmooncakesaredelicious课时4SectionB1a_1d习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit1Howcanwebecomegoodlearners课时3SectionAGrammarFocus_4c习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit5Whataretheshirtsmadeof课时4SectionB1a_1e课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit3Couldyoupleasetellmewheretherestroomsare课时3SectionAGrammarFocus_4c课件新版人教新目标版.pptx
原创力文档


文档评论(0)