操作系统——生产者消费者

Posted junfblog

tags:

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

有界缓冲问题
有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上。其中,pi和cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。

 模型:

int k;        //k个单位的缓冲区 
typedef anyitem item;    //item类型
item buffer[k];    //缓冲区 
int in=0,out=0,counter=0;    //in是生产者的定位 out是消费者的定位 counter是产品 

//生产者线程 
process producer(void) {
while (true)  {
    {produce an item in nextp}
     if (counter==k)  //缓冲满时,生产者睡眠
           sleep(producer); 
   //sleep和wakeup系统内核函数,供应用程序调用
       buffer[in]=nextp;
       in=(in+1)%k;      //循环队列 
       counter++;         //产品       
       if(counter==1)    
       wakeup(consumer);  
        }
   }
 
//消费者线程  
process consumer(void) {
    while (true) {     
    if (counter==0)   //缓冲区空,消费者睡眠
        sleep(consumer);
        nextc=buffer[out];
        out=(out+1)%k;     //循环对列 
        counter--;     //产品 
    if(counter==k-1) //缓冲满了,取走一件产品并唤
        wakeup(producer);      //醒生产者
    {consume the item in nextc};//消耗产品
    }
} 

 

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

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

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

生产者与消费者 代码实现 java

java生产者/消费者模式实现——一生产者一消费者(操作值)

(王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题

用C语言实现--生产者与消费者的问题(PV操作)