操作系统
进程
R
信号量: S1=0 S2=0 S3=0
进程S 进程T
图6-12 R、S、T之间的相互制约关系
4.假定有3个进程R、W1、W2共享一个缓冲区B,B中每次只能存放一个数。进程R从输入设备读入一个数,把它存放到缓冲区B里。如果存入的是奇数,则由进程W1取出打印;如果存入的是偶数,则由进程W2取出打印。规定进程R只有在缓冲区B为空或内容已经被打印后才能进行存放;进程W1和W2不能从空缓冲区里取数,也不能重复打印。试用信号量及其P、V操作管理这3个进程,让它们能够协调地正确工作。 解:这实际上也是最简单“生产者—消费者”问题的变种:进程R是产生者,进程W1、W2是两个消费者。只是W1只消费奇数,W2只消费偶数。
进程进程W2
进程W1
图6-13所示的是3个进程的工作示意。 图6-13 奇数、偶数问题
分析一下题目,知道3个进程间有如下的制约关系存在:
(1)进程R申请使用缓冲区B,释放缓冲区B的权利是由进程W1或W2掌握的; (2)进程
W1要等待R往缓冲区B里放入奇数后,才能工作(要与R取得同步),然后释放缓冲区;
(3)进程W2要等待R往缓冲区B里放入偶数后,才能工作(要与R取得同步),然后释放缓冲区。
因此,应该设置3个信号量:
S——初值为1,控制缓冲区B的分配; SO——初值为0,控制W1与R取得同步;
SE——初值为0,控制W2与R取得同步。 3个进程的工作流程如图6-14所示。