生产者/消费者问题
来源:互联网 发布:淘宝护肤品禁用词 编辑:程序博客网 时间:2024/06/07 12:12
用抽象的术语,定义如下的生产者和消费者函数:
producerwhile(true) {/* produce item v */;b[in]=v;in+=;}
consumerwhile(true) {while(in<=out)/* do nothing*/;w=b[out];out++;/*consume item w */;}
下图是缓冲区b的结构:
使用二元信号量解决无限缓冲区生产者/消费者模型
int n;binary_semaphore s=1,delay=0;void priducer(){while (true) {produce();semWaitB(s);append();n++;if (n==1)semSignalB(delay);semSignalB(s);}}void consumer(){int m;semWaitB(delay);while(true){semWaitB(s);take();n--;m=n;semSignalB(s);consume();if(m==0)semWaitB(delay);}}void main(){n=0;parbegin (producer,consumer);}
使用信号量解决无限缓冲区 生产者/消费者模型
semaphore n=0,s=1;void producer(){while (true){produce();semWaitB(s);append();semSignal(s);semSignal(n);}}void consumer(){while(true){semWait(n);semWait(s);take();semSignal(s);consume();}}void main(){parbegin (producer,consumer);}
下面,我们给生产者/消费者模型增加一个新的实际约束:
缓冲区是有限的。
使用信号量解决有限缓冲区生产者/消费者模型
const int sizeofbuffer = /*缓冲区大小*/;semaphore s=1,n=0,e=sizeofbuffer;void producer(){while(ture){produce();semWait(e);semWaita(s);append();semSignal(s);semSignal(n);}}void consumer(){while(true){semWait(n);semWait(s);take();semSignal(s);semSignal(e);consume();}}void main(){parbegin (producer,consumer);}
阅读全文
0 0
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 操作系统:生产者-消费者问题
- 生产者与消费者问题
- 生产者-消费者问题
- 关于生产者-消费者问题
- java生产者 消费者问题
- 消费者和生产者问题
- 生产者消费者问题
- 生产者消费者问题--多线程
- 生产者-消费者同步问题
- 生产者消费者问题
- 生产者与消费者问题
- 生产者 消费者问题!
- 生产者与消费者问题
- 生产者消费者问题
- 关于生产者-消费者问题
- leetcode-Remove Boxes
- ViewPager滑动事件讲解
- linux系统svn操作
- Git使用本地仓库之基本操作
- 每天一个Linux命令(47):iostat命令
- 生产者/消费者问题
- POJ 1297 Supermarket 笔记
- C 币获得方法
- Find Bottom Left Tree Value
- Linux_0611_CP模型
- 每天一个Linux命令(48):watch命令
- [BZOJ 1053][HAOI2007]反素数ant:搜索
- 前端知识简单总结
- 每天一个Linux命令(49):at命令