操作系统生产者问题
-
一 单生产消费问题
-
1、思路
- 主要问题是互斥、两对同步问题。互斥的是互斥访问临界区,同步的是二者产生的变化都对对方有影响。
-
2、设置变量(三个变量)
- ① 互斥访问临界区变量LJ = 1
- 设置为1,表示临界区只能一个进程访问。
- ② 空闲缓冲区变量KX = n
- 开始为资源数量n,记录当前临界区的空闲块块还有多少。
- ③ 满缓冲区变量CP = 0
- 开始为0,记录当前产品的数量,也就是非空闲的块块数量。
- ① 互斥访问临界区变量LJ = 1
-
3、过程
-
4、注意事项
- 不能更改P操作的顺序,访问空闲区的P操作必须在互斥临界区P操作之前。否则会生产和消费互相循环等待,等待对方唤醒自己,产生“死锁”。
- 相反V操作可以交换,因为都是对资源加1,谁在前面加都可以。
- 虽说很多代码都可以放到临界区,但是不重要冗余的代码放到临界区,会让处理速度变慢,降低系统的并发度。
-
二 多生产消费问题
-
1、思路
-
2、设置变量
- ①互斥访问临界区的变量 mutex = 1
- 设置为1,表示临界区只能一个进程访问。
- ②盘子数量的变量 plate = 1
- 盘子数量也只有一个,只能一个进程防访问。
- ③盘子中苹果的变量 apple = 0
- 开始父亲未放苹果,苹果数量为0。
- ④盘子中橘子的变量 orange = 0
- 开始母亲未放橘子,橘子数量为0。
- ①互斥访问临界区的变量 mutex = 1
-
3、过程
-
4、注意事项
- 可以不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象。但是这是特殊情况,做题的时候直接全部加上,一定能保证互斥访问。
- 如果盘子数量为2,就会有两个进程进入盘子,就可能会出现数据相互覆盖的问题。
-