操作系统生产者问题

  • 一 单生产消费问题

  • 1、思路

    • 主要问题是互斥、两对同步问题。互斥的是互斥访问临界区,同步的是二者产生的变化都对对方有影响。
  • 2、设置变量(三个变量)

    • ① 互斥访问临界区变量LJ = 1
      • 设置为1,表示临界区只能一个进程访问。
    • ② 空闲缓冲区变量KX = n
      • 开始为资源数量n,记录当前临界区的空闲块块还有多少。
    • ③ 满缓冲区变量CP = 0
      • 开始为0,记录当前产品的数量,也就是非空闲的块块数量。
  • 3、过程

    • 操作系统生产者问题

  • 4、注意事项

    • 不能更改P操作的顺序,访问空闲区的P操作必须在互斥临界区P操作之前。否则会生产和消费互相循环等待,等待对方唤醒自己,产生“死锁”。
    • 相反V操作可以交换,因为都是对资源加1,谁在前面加都可以。
    • 虽说很多代码都可以放到临界区,但是不重要冗余的代码放到临界区,会让处理速度变慢,降低系统的并发度。

 


  • 二 多生产消费问题

    • 1、思路

      • 操作系统生产者问题

    • 2、设置变量

      • ①互斥访问临界区的变量 mutex = 1
        • 设置为1,表示临界区只能一个进程访问。
      • ②盘子数量的变量 plate = 1
        • 盘子数量也只有一个,只能一个进程防访问。
      • ③盘子中苹果的变量 apple = 0
        • 开始父亲未放苹果,苹果数量为0。
      • ④盘子中橘子的变量 orange = 0
        • 开始母亲未放橘子,橘子数量为0。
    • 3、过程

      • 操作系统生产者问题

    • 4、注意事项

      • 可以不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象。但是这是特殊情况,做题的时候直接全部加上,一定能保证互斥访问。
      • 如果盘子数量为2,就会有两个进程进入盘子,就可能会出现数据相互覆盖的问题。