设有一个具有N个信息元素的环形缓冲区,A进程顺序地把信息写入缓冲区,B进程依次地从缓冲区中读出信息。回答下列问题:
(1)叙述A、B两个进程的相互制约关系。
(2)用P、V操作表示A、B进程的同步算法。
参考答案:(A)A和B两个进程的相互制约关系是既有互斥又有同步:对缓冲区的访问必须互斥,并且当缓冲区满时,A进程不可以写,必须等待;当缓冲区空时,B进程不可以读,必须等待。
(B)用P、V操作表示A、B进程的同步算法如下:
BEGIN
Buffer: ARRAY [0..N-A] of integer;
m, out: Integer;
S0,SA,SB: Semaphore;
S0:=A; SA"=0; SB:=N;
in:=out:=0;
Cobegin
Process PROCEDURE A;
BEGIN
LA: 生产数据m;
P(SB); //等待可用的缓冲区空间
P(S0); //保护对in、out的操作
Buffer(in):=m;
in:=(in+A) MOD N;
V(SA); //有新数据,唤醒消费者进程
V(S0);
Goto LA
END
Process PROCEDURE B;
BEGIN
LB: P(SA); //等待新数据
P(S0); //保护对in、out的操作
m"=burfer(out);
out:=(out+A) MOD N;
V(SB); //增加可用空间
V(S0);
消费m;
goto LB
END
Coend
END