设有三个进程R、W1、W2共享一个缓冲区B,而B中每次只能存放一个数。当B中无数时,R可将从输入设备上读入的数存放到B中。若存放到B中的是奇数,则允许W1将其取出打印;若存放到B中的是偶数,则允许W2将其取出打印。同时规定,R必须等B中的数被取出打印后才能再存放一个数;W1或W2对每次存入B中的数只能打印一次;W1和W2都有不能从空的B中取数。写出三个并发进程能正确工作的程序。
Begin
B:integer;
S,SO,SE:semaphore;
S:=1; SO:=0; SE=0;
Cobegin
Process R
x:integer;
begin
Ll:从输入设备读一个数;
x:=读入的数;
P(S);
B:=x;
if B=奇数 then V(SO)
else V(SE);
go to L1
end;
Process W1
y:integer;
begin
L2:P(SO);
y=B;
V(S);
打印y中数;
go to L2
end;
process W2
z:integer;
begin
L3:P(SE);
z:=B;
V(S);
打印z中数;
go to L3
end;
Coend;
End;