代码改变世界

用信号量及其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.探索哲学家问题的正确解法。