操作系统——生产者消费者
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生产者/消费者模式实现——一生产者一消费者(操作值)