用信号量及其PV操作处理实际问题

1.书上课后练习P187-43

答:

Cemaphore empty=1;

橘子精=0;糖=0;水=0;

         Process product(){

               While(true){

                      P(empty);

                      产生一个随机数s;

                     If(s==0) V(橘子精);

                     If(s==1) V(水);

                     If(s==2) V(糖);

              }

        }

       Process P1(){

                Process P2(){

                      Process P3(){

                           While(true){

                                  while(true){

                                         while(true){

                                               P(橘子精); 

                                               P(糖);

                       P(水);

                       取走橘子精;

                         取走糖;

                      取走水;

                        V(empty);

                        V(empty);

                     V(empty);

                  }

                                  }

                            }

                   }

            }

      }

Coend

 

2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。

  1. 这个问题有哪些进程?进程之间有什么样的制约关系?
  2. 用信号量及PV操作写出这些进程之间的同步算法。

答:

1.有输入进程、处理进程、输出进程。输入进程受处理进程影响,B1放满信息后R进程要等待——等处理进程将其中信息全部取走,才能继续读入信息;处理进程受输入进程和P进程的约束:B1中信息放满后处理进程才可从中取出它们,且B2被取空后处理进程才可将加工结果送入其中;输出进程受处理进程的约束:B2中信息放满后输出进程才可从中取出它们,进行打印。

2.

semaphore s1,s2,s3,s4;
semaphore mutex1,mutex2;
mutex1=1,mutex2=1;
cobegin
Process input(){
while(true);
input();
p(s1);
P(mutex1);
数据放入B1(M1);
m1=(m1+1)%M
v(mutex1);
V(s2);
}coend

Process Processing(){
while(true);
p(s2);
P(mutex2);
在B1取出数据;
   out1=(out1+1)%M;
Processing();
v(s1);
数据处理后放入B2(M2);
m2=(m2+1)%M
v(mutex2);
V(s3);
}coend

Process output(){
while(true);
p(s3);
在B2取出数据;
ouput();
 out2=(out2+1)%M;
}coend

 

3.探索哲学家问题的正确解法。

posted @ 2019-05-09 13:27  赫赫核  阅读(148)  评论(0编辑  收藏  举报