生产者消费者问题(代码实现)
来源:互联网 发布:淘宝买的袖剑能杀人吗 编辑:程序博客网 时间:2024/05/20 00:51
生产者-消费者问题(也被称为有界缓冲器问题)是一个典型的例子多线程同步的问题。问题描述了两个进程,生产者和消费者,谁都有一个共同的,固定大小的缓冲区作为一个队列。制片人的工作是生成数据,把它放入缓冲区,并重新开始。同时,消费者在消费数据(即,从缓冲器中移除),一次一个块。问题是确保生产者不会尝试将数据添加到缓冲区,如果它的全部,而且消费者不会尝试从空缓冲区删除数据。
对生产者的解决方案是要么去当缓冲区已满睡觉或丢弃数据。下一次消费者从缓冲区中删除一个项目,它会通知生产者,谁再次开始填充缓冲区。以同样的方式,用户可以进入休眠状态,如果它发现该缓冲器是空的。下一次的生产者把数据放入缓冲器,它唤醒睡眠消费者。该溶液可以通过以下方式来达到的进程间通信,通常使用的信号量。一个不充分的解决方案可能会导致死锁,其中两个进程都在等待被唤醒。该问题也可推广到具有多个生产者和消费者。
接下来,我们来实现一个一个程序,它是功能是开两个线程,使一个数加到1W,也就是两个线程各加五千次,首先,我写出来以下程序:
然后,我们看看结果:
然而,我们并没有得到我们想要的答案,这是为什么呢?那我们先改变一下代码:
在看看结果:
在说这个程序,我们先来了解一个函数:
所以,我们接下来开始写消费者和生产者问题;
但是,他们既要有互斥,也要有同步,怎么实现同步呢?
所以,来看看结果:
所以,这样便可以。
PS:(关于线程的其他问题,在本人前几篇博文已经简述过了)
在这里,本人实现了一个消费者和一个生产者,如果换成多个消费者和多个生产者呢?
读者可以思考一下。
0 0
- 生产者消费者问题(代码实现)
- java代码实现多线程消费者生产者问题。
- 生产者消费者实现代码
- 生产者消费者问题(实现)
- 生产者消费者问题(附代码)
- 生产者消费者问题(C实现)
- 生产者消费者问题(java实现)
- 消费者与生产者问题代码
- 生产者消费者问题代码示例
- 用多线程实现“生产者-消费者问题”(代码+实验报告)
- 用java代码实现生产者和消费者的问题
- 生产者消费者问题 伪代码和C语言多线程实现
- 生产者-消费者问题【Java实现】
- 生产者-消费者问题实现 (windows)
- 生产者-消费者问题实现
- 编程实现生产者消费者问题
- 生产者-消费者问题 java实现
- java生产者消费者问题实现
- C#编码规范
- 地质年代
- Java annotation详解
- c# - 反序列化报错:Input string was not in a correct format
- 自拟三子棋小游戏
- 生产者消费者问题(代码实现)
- Object类-----简单描述
- 解决studio导入eclipse乱码问题
- 华为支持ONOS@IETF Hackathon——标准与开源的完美邂逅
- PULL解析XML小实例
- Java烧脑驴游(十三)--方法
- iOS开发 - 第04篇 - 网络 - 07 - JS & jQuery & UIWebView和JS交互
- ubuntu彻底卸载软件
- 题目1186:打印日期