生产者和消费者问题
问题简述
组成
-
系统中有一组生产者和消费者进程
-
生产者
- 生产者将产品放入缓冲区
-
消费者
- 消费者进程每次从缓冲区中取出一个产品
-
缓冲区
- 初始为空,大小为n的缓冲区
- 临界资源,各进程必须互斥访问
信号量PV操作分析步骤
1 关系分析
- 找出题目中描述的各个进程分析他们之间的同步、互斥关系
2 整理思路
- 根据各进程的操作流程确定PV操作的大致顺序
3 设置信号量
-
设置需要的信号量,并根据 题目条件确定信号量初始值
- 互斥信号量一般为1
- 同步信号量要看对应资源的初始值
举例
-
信号量设置
-
同步信号量
-
空闲缓冲区的数量
- semaphore mutex = n
-
非空闲缓冲区的数量
- semaphore mutex = 0
-
-
互斥信号量
-
对缓冲区的互斥访问
- semaphore mutex = 1
-
-
-
生产者进程和消费者进程实现
-
生产者
image.png -
消费者
image.png
-
-
能否改变PV顺序?
-
举例
-
生产者
image.png -
消费者
image.png
-
-
- 分析
- 前提
- 此时缓冲区已经放满产品
- empty=0
- full=n
- 生产者
- 先使mutex=0
- 再执行P(empty)
- 由于empty=0
- 生产者被阻塞
- 消费者
- 消费者进程执行
- mutex为0
- 消费者也被阻塞
- 结果
- 死锁
- 总结
- 实现互斥的P操作一定要在实现同步的P操作之后
网友评论