码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-29 23:24:49      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:连接   消费   while   ++   缓冲   nbsp   类型   cer   ext   

有界缓冲问题
有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};//消耗产品
    }
} 

 

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

标签:连接   消费   while   ++   缓冲   nbsp   类型   cer   ext   

原文地址:https://www.cnblogs.com/junfblog/p/12805600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!