基于环形队列的单生产者单消费者模型
来源:互联网 发布:js utf16to8 编辑:程序博客网 时间:2024/04/27 21:39
程序代码
生产者消费者模型
简单来说就是“321原则(并非某一规则,而是为了理解生产者消费者模型)”
“3”种关系
生产者与消费者的互斥与同步关系
生产者与生产者的互斥关系
消费者与消费者的互斥关系
“2”种角色
生产者:往交易场所放东西的人
消费者:从交易场所取东西的人
“1”个交易场所
所谓交易场所就是内存中具有存储数据的一段有界缓冲区
综上,给出生产者消费者模型的描述:两个进程共享一个缓冲区,一个进程称为生产者向缓冲区中放数据,另一个称为消费者从缓冲取中取数据,当缓冲区中被放时,生产者进程就必须可进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲取中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。
基于环形队列的单生产者消费者模型
首先必须制定一些规则
生产者优先:其实就算消费者优先,由于刚开始没有生产出数据,消费者也会被挂起;
消费者永远不能追上消费者:试想一下如果消费者追上生产者或者超过消费者的时候,此时消费者消费的并不是生产者实际所生产出的数据,而属于垃圾数据;
生产者不能将消费者包一圈:这个也很好理解,如果生产者允许将消费者包一圈的话,那就相当于生产者可以无限的生产,并不停的覆盖掉原来所产生的数据,那么如果原来生产出的数据中如果有的是消费者需要获取的数据,那么除了生产者在次生产出该数据外,消费者将再也不能得到所想要的数据;
图示:
运行结果
阅读全文
0 0
- 基于环形队列的单生产者单消费者模型
- 基于单链表和基于环形队列的生产者消费者模型
- 基于单链表以及环形队列的生产者消费者模型
- 基于环形队列的生产者消费者模型编写。
- Linux基于单链表&环形队列的多线程生产者消费者模型
- 基于单链表和环形队列的生产者-消费者模型
- 单生产者-单消费者模型
- 基于单链表、环形队列(并发有锁)的多线程生产者消费者模型
- 用生产者消费者模型实现的线程安全环形队列
- 单生产者单消费者模式的无锁队列实现
- 生产者与消费者模型(基于单链表、环形队列、多线程、多消费多生产)
- 单生产者,单消费者
- 单生产者 单消费者
- 并发无锁队列学习(单生产者单消费者模型)
- 单生产者-多消费者模型中遇到的问题
- 链表 环形 生产者消费者模型
- 基于链表及环形队列的生产者与消费者简单实现
- 单生产者单消费者循环无锁队列
- 自学Java之Java编程(通过Internet 进行通信)(017day)
- Linux安装ftp组件(vsftpd)
- js中类定义函数时用prototype与不用的区别
- 96 C语言指针变量作为函数参数
- 蓝桥杯训练:递归——f(n)=n!
- 基于环形队列的单生产者单消费者模型
- Android设备开机时间统计
- LeetCode 24. Swap Nodes in Pairs 解题报告
- AsynHttpClient和SmartImageView控件做一个新闻发布系统
- K-Means和PCA降维小结
- 常用正则表达式
- 97 用C语言指针作为函数返回值
- 蓝桥杯训练:递归——求N个数的最大值
- ACM:E: ACM小组的组长