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

将生产者和消费者问题深入理解、融会贯通。

1.书上课后练习P187-43

 semaphore mutex=1,P=1,P1=0,P2=0,P3=0;

process P(){

    while(ture){

        P(P);

       P(mutex);

        放入原料;

        if(放入糖) v(P2);

        if(放入水)  v(P3);

        else v(P1); 

        v(mutex);  }

}

 

process P1() {

        while(ture){

         P(P1);

         P(mutex);

         取走橘子精;

        v(mutex);

        v(P);

  } 

 

process P2() {

        while(ture){

         P(P2);

         P(mutex);

         取走糖;

        v(mutex);

        v(P);  }

}

 

process P3() {

        while(ture){

         P(P3);

         P(mutex);

         取走水;

        v(mutex);

        v(P);  }

}

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

  1. 这个问题有哪些进程?进程之间有什么样的制约关系? 

            输入进程,处理进程,输出进程。同步,并发的关系。

        2. 用信号量及PV操作写出这些进程之间的同步算法。

 

semaphore b1full=0, b1empty=0, b2full=0, b2empty=0;

process R() {

        输入信息写入缓冲区R1中;

        v(b1full);

        p(b1empty);

}

process C() {

         p(b1full);

         从B1中取出信息;

         加工信息;

         结果送去B2;

         v(b1empty);

         v(b2full);

         p(b1empty);

}

process P() {

          p(b1full);

          从B2中取出信息进行打印;

          v(b2empty);

}

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

posted @ 2019-05-09 13:35  借一程山水  阅读(316)  评论(0编辑  收藏  举报