- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扬州大学操作系统综合题
生产者与消费者
设有一缓冲池P,P中含有20个可用缓冲区,一个输入进程将外部数据读入P,另有一个输出进程将P中数据取出并输出。若讲程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法,要求写出信号量的初值。
解:
semaphore?mutex=1;
semaphore?empty=20;
semaphore?full=0;
int?in,out?=?0;
item p [20];
void?Producer(){
while(ture){
???????producer an item in nextp;
wait(empty);
wait(mutex);
p[in] := nextp;
in := (in+1) mod 20;
signal(mutex);
signal(full);
? }
}
void?Consumer(){
while(ture){
wait(full);
wait(mutex);
nextc := p[out];
out := (out+1) mod 20;
signal(mutex);
signal(empty);
}
}
有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设置一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个产品消费。semaphore mutex=1,empty=n,full=0;item buffer[n]; //缓冲区int in=out=0; //输入、输出指针void producer()
{
while(1)
{ 生产一个产品nextp;…wait(empty); //等待空缓冲区的数目非0wait(mutex); //等待无进程操作缓冲区
buffer[in]= nextp; //往Buffer [in]放产品in = (in+1) mod n;signal(mutex); //允许其它进程操作缓冲区signal(full); //增加已用缓冲区的数目}
}
void consumer()
{
while(1)
{ ……
wait(full); //等待已用缓冲区的数目非0wait(mutex); //等待无进程操作缓冲区nextc = buffer[out]; //从Buffer [out]取产品out = (out +1) mod n;signal(mutex); //允许其它进程操作缓冲区signal(empty); //增加空缓冲区的数目消费nextc产品;}
}
main()
{
cobegin{
producer();
consumer();
}
}
}
利用AND信号量解决生产者-消费者问题
semaphore mutex=1,empty=n,full=0;item buffer[n]; //缓冲区int in=out=0; //输入、输出指针void producer()
{
while(1)
{
…生产一个产品nextp;…swait(empty, mutex);buffer[in]= nextp; //往Buffer [in]放产品in = (in+1) mod n;ssignal(mutex, full);}
}
void consumer()
{
while(1)
{
……
swait(full, mutex);nextc = buffer[out]; //从Buffer [out]取产品out = (out +1) mod n;signal(mutex, empty);消费nextc产品;}
}
Begin
Parbegin
Process Reader:begin
repeat
wait(readcount);
wait(mutex);
填入座号和姓名完成登记;
signal(mutex);
阅读
wait(mutex)
删除登记表中的相关表项,完成注销
signal(mutex);
signal(readcount);
until false;
end;
parend;
End;
在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。
var s1,s2:semaphore:=0,0;
begin
parbegin
Process Driver
begin
repeat
go right;
stop
您可能关注的文档
- 手术室新入职护士考试试题及答案2.doc
- 手术患者评估交接记录单.doc
- 手机APP智能一卡通系统的分类.doc
- 手术室湿度控制电路的设计.doc
- 手术室的护理安全管理是整个护理质量的重要组成部分.doc
- 手机中电阻电容电感.docx
- 手机实名制与电信咋骗.doc
- 手机摄像头调试经验分享.docx
- 手机登苏大邮箱的设置.docx
- 手机的分区信息详解.doc
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].docx
- 情绪价值系列报告:春节消费抢先看-国证国际证券.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(解析版).docx
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].docx
- 液冷盲插快接头发展研究报告-全球计算联盟.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(原卷版).docx
- 精品解析:北京市东直门中学2024届高三考前练习数学试卷(解析版).docx
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第2章 人体的神经调节》大单元整体教学设计[2020课标].docx
文档评论(0)