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