pv操作习题Word文档格式.docx

上传人:b****4 文档编号:7739842 上传时间:2023-05-09 格式:DOCX 页数:17 大小:22.05KB
下载 相关 举报
pv操作习题Word文档格式.docx_第1页
第1页 / 共17页
pv操作习题Word文档格式.docx_第2页
第2页 / 共17页
pv操作习题Word文档格式.docx_第3页
第3页 / 共17页
pv操作习题Word文档格式.docx_第4页
第4页 / 共17页
pv操作习题Word文档格式.docx_第5页
第5页 / 共17页
pv操作习题Word文档格式.docx_第6页
第6页 / 共17页
pv操作习题Word文档格式.docx_第7页
第7页 / 共17页
pv操作习题Word文档格式.docx_第8页
第8页 / 共17页
pv操作习题Word文档格式.docx_第9页
第9页 / 共17页
pv操作习题Word文档格式.docx_第10页
第10页 / 共17页
pv操作习题Word文档格式.docx_第11页
第11页 / 共17页
pv操作习题Word文档格式.docx_第12页
第12页 / 共17页
pv操作习题Word文档格式.docx_第13页
第13页 / 共17页
pv操作习题Word文档格式.docx_第14页
第14页 / 共17页
pv操作习题Word文档格式.docx_第15页
第15页 / 共17页
pv操作习题Word文档格式.docx_第16页
第16页 / 共17页
pv操作习题Word文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

pv操作习题Word文档格式.docx

《pv操作习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《pv操作习题Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

pv操作习题Word文档格式.docx

begin

    L1:

Wait(s);

     拣黑子;

     Signal(s);

     gotoL1;

    end;

    processB:

    L2:

Wait(s);

     拣白子;

     gotoL2;

   parend;

某车站售票厅共有20个售票窗口,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。

每个购票者可看成一个进程。

semaphore=20;

  parbegin

   processPi(i=1,2,……)

    beginWait(s);

     进入售票厅;

     购票;

     退出;

     Signal(s);

    end;

   parend

有座东西方向架设、可双向通行的单车道简易桥,最大负荷为4辆汽车。

请定义合适的信号量,正确使用wait/signal操作,实现双向车辆的过桥过程。

信号量应该有4个:

S,初值为1,代表桥的互斥使用的信号量;

Scounteast,初值为1,代表由东向西行驶的桥上的车辆计数器的互斥使用;

Scountwest,初值为1,代表由西向东行驶的桥上的车辆计数器的互斥使用;

Scount4,初值为4,代表桥上车辆的计数信号量。

varS,Scounteast,Scounwest,Scount4:

semaphore;

S:

=1;

Scounteast=1;

Scountwest:

Scount4:

=4;

Counteast,Countwest:

integer;

Counteast:

=0;

Countwest:

Cobegin,

processeast(i)

begin

P(Scounteast);

ifCounteast=0thenP(S);

Counteast:

=Counteast+l;

V(Scounteast);

P(Scount4);

上桥:

过桥:

下桥;

V(Scount4);

P(Scounteast);

Counteast:

=Counteast-1;

ifCounteast=0thenV(S);

V(Scounteast);

end;

processwest(i)

begin

P(Scountwest);

ifCountwest=0thenP(S);

Countwest:

=Countwest+1;

V(Scountwest);

P(Scount4);

上桥;

下桥:

P(Scountwest);

=Countwest-l;

ifCountwest=0thenV(S);

end;

Coend

有一单向行驶的公路桥,每次只允许一辆汽车通过。

当汽车到达桥头时,若桥上无车,便可上桥;

否则需等待,直到桥上的汽车下桥为止,若每一辆汽车为一个进程,请用Wait、Signal操作原语保证汽车按要求过桥。

汽车进程:

Pi(i=1,2,3,…)

到达桥头;

P(S);

上桥行驶;

到达桥另一端;

V(S);

某超市门口为顾客准备了100辆手推车,每位顾客在进去买东西时取一辆推车,在买完东西结完帐以后再把推车还回去。

试用Wait/Signal操作正确实现顾客进程的同步互斥关系。

semaphoreS_CartNum=100;

//空闲的手推车数量,初值为100

voidconsumer(void)//顾客进程

{

Wait(S_CartNum);

买东西;

结帐;

Signal(S_CartNum);

}

桌子上有一个水果盘,每一次可以往里面放入一个水果。

爸爸专向盘子中放苹果,儿子专等吃盘子中的苹果。

把爸爸、儿子看作二个进程,试用Wait/Signal操作使这四个进程能正确地并发执行。

⏹semaphoreS_PlateNum;

//盘子容量,初值为1

⏹semaphoreS_AppleNum;

//苹果数量,初值为0

父while(TRUE)

Wait(S_PlateNum);

往盘子中放入一个苹果;

Signal(S_AppleNum);

}

子while(TRUE)

Wait(S_AppleNum);

从盘中取出苹果;

Signal(S_PlateNum);

吃苹果;

桌上有一空盘,允许存放一只水果,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。

规定当盘空时一次只能放一只水果供吃者取用。

请用Wait/Signal原语实现爸爸、儿子、女儿三个并发进程的同步。

intS=1;

//S表示盘子是否为空;

intSa=0;

//Sa表示盘中是否有苹果;

intSb=0;

//Sb表示盘中是否有桔子;

父亲while(TRUE)

Wait(S);

将水果放入盘中;

if(放入的是桔子)

Signal(Sb);

Else

Signal(Sa);

儿子while(TRUE)

Wait(Sb);

从盘中取出桔子;

Signal(S);

吃桔子;

女儿while(TRUE)

Wait(Sa);

父亲-母亲-儿子-女儿一个苹果或桔子

信号量:

s=1(空盘);

s1=0(苹果);

s2=0(桔子);

爸爸:

while(true){wait(s);

放苹果;

signal(s1);

妈妈:

放桔子;

signal(s2);

儿子:

while(true){wait(s2);

取桔子;

signal(s);

女儿:

while(true){wait(s1);

取苹果;

父亲-母亲-儿子-女儿两个苹果或桔子

s=2(可用);

mutex=1;

wait(s);

wait(mutex);

放苹果;

signal(mutex);

wait(s2);

wait(s1);

有一个仓库(无限大),可以存放A和B两种产品,但要求:

(1)每次只能存入一种产品(A或B);

(2)-N<A产品数量-B产品数量<M

其中,N和M是正整数。

试用Wait/Signal操作描述产品A与产品B的入库过程。

intmutex=1;

//互斥信号量

intsa=M-1;

//表示当前允许A产品比B产品多入库的数量

intsb=N-1;

//表示当前允许B产品比A产品多入库的数量

main()

while

(1)

取一个产品;

if(取的是A产品)

P(sa);

P(mutex);

将产品入库;

V(mutex);

V(sb);

else

P(sb);

V(sa);

某仓库存放两种零件A和B,最大数量均为m个。

有一车间不断地取A和B进行装配,每次各取一个。

为避免零件锈蚀,遵循先入库者先出库的原则。

有两个供应商分别不断地供应A、B零件(每次一个)。

为保证齐套和合理库存,当某种零件的数量比另一种的数量超过n(n<

m)个时,暂停对数量大的零件的进货,补充数量少的零件。

(1)问共需设置几个进程?

(2)用Wait/Signal操作解决上述问题中的同步互斥关系。

本题中给出的两种零件数量关系为:

A零件数量-B零件数量≤n

B零件数量-A零件数量≤n

A零件数量≤m

B零件数量≤m

semaphoremutex=1;

semaphoreemptya=m;

semaphoreemptyb=m;

semaphorefulla=0;

semaphorefullb=0;

semaphoresa=n;

semaphoresb=n;

main()

cobegin

Provider_A();

Provider_B();

Assembling_shop();

conend

Provider_A()

while(true)

{

wait(emptya);

wait(sa);

将零件A放入仓库;

signal(fulla);

signal(sb);

Provider_B()

wait(emptyb);

wait(sb);

signal(fullb);

signal(sa);

Assembling_shop()

wait(fulla);

wait(fullb);

装配零件;

signal(emptya);

signal(emptyb);

设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售者销售;

销售者每次循环从仓库中取出一个产品进行销售。

如果不允许同时入库,也不允许边入库边出库;

而且要求生产和销售A产品和B产品的件数都满足一下关系:

-N≤A产品数量-B产品数量≤M

其中,N和M是正整数。

试用信号量机制写出A、B、C三个进程的工作流程。

ints1=M;

//表示当前允许A产品比B产品

多入库的数量

ints2=N;

//表示当前允许B产品比A产品

ints=0;

//表示当前仓库中产品的总数量

intsa=0;

//表示当前仓库中A产品的数量

intsb=0;

//表示当前仓库中B产品的数量

intdif=0;

//表示所销售的A、B产品的数量差

Process_A:

wait(s1);

produceaproductA;

addtheproductAtothestorehouse;

Process_B:

wait(s2);

produceaproductB;

addtheproductBtothestorehouse;

Process_C:

wait(s);

ifdif<

=-n{

takeaproductA;

dif:

=dif+1;

elseifdif>

=m{

takeaproductB;

=dif-1;

else{

takeaproduct;

ifproduct_type=A{

else{

selltheproduct;

一个数据采集系统,有数据采样进程和数据处理进程及数据输出进程。

采样进程把采到的数据送入buf1中,由数据处理进程取出处理并存入buf2中,然后由数据输出进程将其从buf2中输出,试给出实现三个进程同步的算法。

信号量设置:

semphoreempty1=1;

Semphorefull1=0;

semphoreempty2=1;

sSemphorefull2=0;

Process_A()

采集一个数据;

Wait(empty1);

将数据存入buf1中;

Signal(full1);

Process_B()

Wait(full1);

从buf1中取出数据;

Signal(empty1);

处理数据;

Wait(empty2);

将处理结果存入buf2;

Signal(full2);

Process_C()

Wait(full2);

从buf2中取出结果;

Signal(empty2);

打印输出;

在天津大学与南开大学之间有一条弯曲的小路,这条路上每次每个方向上只允许一辆自行车通过。

但其中有一个小的安全岛M,同时允许两辆自行车停留,可供两辆自行车已从两端进入小路的情况下错车使用。

 

t:

l:

k:

m=2;

Process_T2N()

wait(t);

wait(l);

通过L路段;

wait(m);

进入安全岛M;

signal(l);

wait(k);

通过K路段

signal(m);

signal(k);

signal(t);

Process_N2T()

通过K路段;

进入安全岛M;

coend

end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2