用信号量及其PV操作处理实际问题
2019-05-07 21:15 陆许 阅读(165) 评论(0) 编辑 收藏 举报1.书上课后练习P187-43
semaphore S,S1,S2,S3;
S=1;S1=0;S2=0;S3=0;
process 供应商
begin
repeat
P(S);
售卖一样物品;
if 售卖橘子精 then V(S1);
else if 售卖糖 then V(S2);
else V(S3)
until false
end
process P1
begin
repeat
P(S1);
购买橘子精;
配制橘子汁;
V(S);
Until false
end
process P2
begin
repeat
P(S2);
购买糖;
配制橘子汁;
V(S);
Until false
end
process P3
begin
repeat
P(S3);
购买水;
配制橘子汁;
V(S);
Until false
end
2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。
a.这个问题有哪些进程?进程之间有什么样的制约关系?
b.用信号量及PV操作写出这些进程之间的算法。
a.这个问题有三个进程,输入进程、处理进程以及输出进程。处理进程需要输入进程输入数据后才可以进行处理数据,输出进程需要处理进程处理完数据以后才可以输出数据。
b.
S1=S2=S3=S4=0;
mutex1=1;mutex2=1;
process input
begin
输入数据;
P(S1);
P(mutex1);
数据放入B1(in1);
in1=(in+1)%M;
V(mutex1);
V(S2);
end
process handle
begin
P(S2);
P(mutex1);
从B1(out1)取出数据;
out1=(out+1)%M;
V(mutex1);
V(S1);
处理数据;
P(S3);
P(mutex2);
数据放入B2(in2);
in2=(in2+1)%N;
V(mutex2);
V(S4);
end
process output
begin
P(S4);
P(mutex2);
从B2(out2)取出数据;
out2=(out2+1)%N;
V(mutex2);
V(S3);
输出数据;
end
3.探索哲学家问题的正确解法。