基于环形队列的单生产者单消费者模型

来源:互联网 发布:js utf16to8 编辑:程序博客网 时间:2024/04/27 21:39

程序代码

生产者消费者模型

简单来说就是“321原则(并非某一规则,而是为了理解生产者消费者模型)”

“3”种关系

生产者与消费者的互斥与同步关系

生产者与生产者的互斥关系

消费者与消费者的互斥关系

“2”种角色

生产者:往交易场所放东西的人

消费者:从交易场所取东西的人

“1”个交易场所

所谓交易场所就是内存中具有存储数据的一段有界缓冲区

综上,给出生产者消费者模型的描述:两个进程共享一个缓冲区,一个进程称为生产者向缓冲区中放数据,另一个称为消费者从缓冲取中取数据,当缓冲区中被放时,生产者进程就必须可进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲取中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。

基于环形队列的单生产者消费者模型

首先必须制定一些规则

生产者优先:其实就算消费者优先,由于刚开始没有生产出数据,消费者也会被挂起;

消费者永远不能追上消费者:试想一下如果消费者追上生产者或者超过消费者的时候,此时消费者消费的并不是生产者实际所生产出的数据,而属于垃圾数据;

生产者不能将消费者包一圈:这个也很好理解,如果生产者允许将消费者包一圈的话,那就相当于生产者可以无限的生产,并不停的覆盖掉原来所产生的数据,那么如果原来生产出的数据中如果有的是消费者需要获取的数据,那么除了生产者在次生产出该数据外,消费者将再也不能得到所想要的数据;

图示:




运行结果




阅读全文
0 0
原创粉丝点击