生产者消费者问题

#问题描述


系统有一组生产者和一组消费者进程,生产者进程每次生产一个产品进入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。他们共享一个初始值为空,大小为n的缓冲区

  • 只有缓冲区不满时,生产者才能把产品写入缓冲区,否则等待
  • 只有缓冲区不空时,消费者才能从缓冲区中写入产品,否则等待
  • *上述两个关系,存在同步*
  • 缓冲区是临界资源,各进程必须互斥访问
  • #依题分析
  • 分析需要多少个信号量:
  • 缓冲区互斥访问,互斥信号量,需要设置mutex=1,保证互斥访问
  • 产品数量同步,同步信号量,需要设置full=0,保证产品写入写出同步
  • 空闲缓冲区数量,同步信号量,需要设置empty=n(缓冲区大小),表示空闲缓冲区
  • 分析生产者进程PV操作实现同步及互斥
  • 生产者生产产品后:
  • 需要消耗缓冲区空间,P操作申请一个资源如果empty=0,则阻塞挂起
  • 若有空间,则设置上锁,若mutex<=0,则阻塞挂起
  • 放入缓冲区后,设置解锁,并V操作“释放”一个产品(提供一个产品)
  • Pasted image 20260704184115.png
  • 分析消费者进程PV曹组实现同步互斥
  • 消费者消耗产品,需要P操作申请一个产品
  • 有产品,则设置上锁准备访问临界区
  • 进入缓冲区取走产品后,设置解锁,并V操作释放一个缓冲区空间
  • Pasted image 20260704184145.png