操作系统中生产者/消费者问题(一)
2016-10-08 18:26
141 查看
生产者/消费者是个典型的进程同步问题,只有生产者生产出来东西了,消费者才能消费
也就是说,生产者生成出来一个东西,然后通知消费者,(东西好了,快来拿吧),而消费者则查看缓冲器里面有没有东西,若没有则会通知生产者生产东西,这样一个钟相互合作的进程同步问题。
一、一个生产者,一个消费者,一个缓冲器
分析:
首先需要一个信号量用于计数剩余空的缓冲器的数量sp = 1。
需要一个存放数据的缓冲器buffer;
因为有两个人(生产者,消费者)要清楚知道缓冲器的状况(满还是空),所以还需要一个信号量sc = 0,用于说明空寄存器的个数。
二、一个生产者,一个消费者和n个缓冲器
这个和上面差不多,也是一个一个往缓冲器里面放东西,生产者看到有缓冲器是空就会往里面放东西,但还是一个一个放,所以只要修改上面程序将buffer改为buffer[k],然后k=(++k)%n,计数就行。
也就是说,生产者生成出来一个东西,然后通知消费者,(东西好了,快来拿吧),而消费者则查看缓冲器里面有没有东西,若没有则会通知生产者生产东西,这样一个钟相互合作的进程同步问题。
一、一个生产者,一个消费者,一个缓冲器
分析:
首先需要一个信号量用于计数剩余空的缓冲器的数量sp = 1。
需要一个存放数据的缓冲器buffer;
因为有两个人(生产者,消费者)要清楚知道缓冲器的状况(满还是空),所以还需要一个信号量sc = 0,用于说明空寄存器的个数。
int buffer; Semaphore sp = 1,sc = 0; process producer(void) { while(1) { {生产一个产品producer}; p(sp); Buffer = product; v(sc); //唤醒消费者 } }
process consumer(void) { while(1) { p(sc); {取走缓冲器中的产品}; v(sp); //唤醒生产者 {消费该产品}; } }
二、一个生产者,一个消费者和n个缓冲器
这个和上面差不多,也是一个一个往缓冲器里面放东西,生产者看到有缓冲器是空就会往里面放东西,但还是一个一个放,所以只要修改上面程序将buffer改为buffer[k],然后k=(++k)%n,计数就行。
int buffer ,k = 0, t = 0; Semaphore sp = 1,sc = 0; process producer(void) { while(1) { {生产一个产品producer}; p(sp); Buffer[k] = product; k = (++k)%n; v(sc); //唤醒消费者 } } process consumer(void) { while(1) { p(sc); {取走缓冲器中的产品}; t = (++t)%n; v(sp); //唤醒生产者 {消费该产品}; } }
相关文章推荐
- 操作系统:经典进程同步问题(1)生产者-消费者问题
- 操作系统 生产者消费者问题
- 操作系统中关于生产者消费者问题
- linux操作系统之生产者与消费者同步问题
- 操作系统课程设计消费者和生产者问题源码解析
- 【操作系统】【学习】生产者和消费者问题
- 生产者-消费者问题(操作系统)原理与实现
- <<现代操作系统>>书本中的java实现生产者/消费者问题的代码改良
- 2015年考研核心考点命题思路解密——操作系统 第2章 进程管理 PV算法 文件打印问题 生产者——消费者问题
- 【操作系统总结】经典的进程同步问题-生产者消费者问题
- 操作系统生产者/消费者问题(二)
- 操作系统:生产者消费者问题
- 操作系统:生产者-消费者问题
- 操作系统里的生产者、消费者问题
- 生产者-消费者问题(操作系统)
- 【操作系统】学习笔记(二)之生产者消费者问题
- 操作系统同步生产者消费者问题
- 操作系统中生产者/消费者问题(一)
- 【操作系统】生产者消费者问题分析(线程同步)
- 操作系统 简单的单生产者单消费者问题