生产者和消费者相关问题

Posted MrHsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者和消费者相关问题相关的知识,希望对你有一定的参考价值。

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

1.书上课后练习P187-43

semaphore  offer=1,P1,P2,P3, sugar,water,orange;
int mutex = 1;
begin
process_offer(){
  while(offer == 0){
    P(mutex);
    P(offer);
    offer();
    if(offer(orange))
      P(orange);
      V(P1);
    else if(offer(sugar))
      P(sugar);
      V(P2);
    else (offer(water))
      P(water);
      V(P3);
    V(mutex);
}
process_P1(){
  while(offer(orange)){
    P(mutex);
    P(P1);
    V(orange);
    V(mutex)
    produce();  //生产橘子汁
    V(offer);
  }
}

process_P2(){
  while(offer(sugar)){
    P(mutex);
    P(P2);
    V(sugar);
    V(mutex)
    produce();  //生产橘子汁
    V(offer);
  }
}

process_P3(){
  while(offer(water)){
    P(mutex);
    P(P3);
    V(water);
    V(mutex)
    produce();  //生产橘子汁
    V(offer);
  }
}

 

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

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

    答:输入进程、处理进程以及输出进程,进程间存在有同步和互斥的关系。

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

int B1[],B2[];
int in = 0;
int out = 0;
semaphore M,N,O;

process_Input(){
   while(in < M){
    P(M);
    append to B1[in];
    in++;
    输入进程;
    V(N);
   }
}

process_Process(){
   while(in > 0 && out < N){
    P(N);
    remove from B1[in]
    in--;
    append to B2[out];
    out++;
       处理进程;
    V(M);
    V(O);
   }
}

process_Output(){
   while(out > 0){
    P(O);
    remove from B2[out];
    out--;
    输出进程;
   }
}

 

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

以上是关于生产者和消费者相关问题的主要内容,如果未能解决你的问题,请参考以下文章

JMS:在同一个应用程序中有一个生产者和相关的消费者有意义吗?

kafka相关知识点总结

在windows操作系统中用信号量机制解决生产者消费者问题的代码

RabbitMQ消费者性能优化相关配置说明

Java调用Kafka生产者,消费者Api及相关配置说明

RocketMQ - 如何用死信队列解决消费者异常