操作系统生产者/消费者问题(二)
来源:互联网 发布:淘宝上卖的珍珠膏 编辑:程序博客网 时间:2024/04/29 00:53
继续我们昨天的问题
三、m个消费者,r个消费者和n个缓冲器
分析:现在是m个生产者在生产了产品向缓冲器存放时,由于只有一个指示位置的共享变量k,所以那些所有的生产者需要互斥访问共享变量k,即同一时刻只能有一个访问,同理消费者共享了指示位置的t,所有消费者也要互斥访问共享变量t,显然生产者需要一个一个的去缓冲器中存放物品,而消费者需要一个一个的到缓冲器中存放物品,但现在有两种解法的点在于:是可以生产者和消费者只能有一个在缓冲器中,还是即使生产者在缓冲器中,消费者也可以进来取东西。
现在我们先来说第一个程序(生产者和消费者同一时刻只能有一个在缓冲器中)
首先我们还要以前讲过的sp = n(用于计数可用资源数(空的缓冲器)),sc = 0(用于记录满的缓冲器)两个信号互斥量,还需要增加一个互斥信号量s = 1(用于生产者和消费者之间互斥访问缓冲器)
int buffer[n],k = 0,t = 0;semaphore sp = n,sc = 0, s = 1;process produceri(void) (i = 1,2,3...m){ while(1) { {生产一个产品product}; p(sp); p(s); buffer[k] = product; k = (++k)%n; v(s); v(sc); }}
process consumerj(void) (j = 1,2,3....r){ while(1) { p(sc); {取走缓冲器buffe[t]中的产品}; t = (++t)%n; v(sp); v(s); {消费该产品}; }}
(2)就是上面所说的在生产者在缓冲器里面房放产品时,消费者也能进去取产品。
其实修改很简单,上面程序不是设置一个信号量让s = 1,不管是消费者还是生产者都只能一个人访问共享变量,现在只要在生产者里面设立一个互斥访问量s1 = 1,然后在消费者里面在设立一个互斥访问量s2 = 1,就行了。
0 0
- 操作系统生产者/消费者问题(二)
- 生产者-消费者问题(操作系统)
- 【操作系统】学习笔记(二)之生产者消费者问题
- 操作系统:生产者-消费者问题
- 操作系统 生产者消费者问题
- 操作系统:生产者消费者问题
- 【操作系统】信号量 (生产者与消费者问题)
- 生产者和消费者问题c++(操作系统)
- 操作系统同步生产者消费者问题
- 操作系统课程设计--生产者消费者问题
- C#生产者与消费者问题(二)
- 操作系统:经典进程同步问题(1)生产者-消费者问题
- Linux操作系统实验初学(1)(生产者消费者问题)
- 生产者-消费者问题(操作系统)原理与实现
- (操作系统原理·第三章)生产者-消费者问题
- 【操作系统】【学习】生产者和消费者问题
- 操作系统里的生产者、消费者问题
- 【操作系统】生产者消费者问题分析(线程同步)
- UVA 12097 Pie(二分)
- spring项目启动报错 cvc-elt.1: Cannot find the declaration of element 'beans'.
- 为何要学习开源GIS
- 2014 xi'an K Last Defence Gym 100548K
- 第27周- C语言游戏编程从入门到精通-例1-猜数字游戏
- 操作系统生产者/消费者问题(二)
- SQL优化
- 赏析linux kernel 中的内核线程
- STL实用技术基本概念
- JAVAONE 2016大会的所见所感
- iOS开发之ReactiveCocoa下的MVVM(干货分享)
- 10 种机器学习算法的要点(附 Python 和 R 代码)
- 面试也有方法论——北漂18年(69)
- 集合距离