【正确答案】设互斥信号量S1,S2初值为1,分别用于对buffer1和buffer2的互斥访问;同步信号量Sn1,Sn2初值为1,分别表示buffer1和buffer2初始状态为空闲,可以放一张卡片信息;同步信号量Sm1和Sm2初值为0,分别表示buffer1和buffer2中的信息还没有被取用(或已被取用了)。用P、V操作完成这三个并发进程间能正确运行的程序如下:
BEGIN
S1,S2,Sn1,Sn2,Sm1,Sm2:semaphore;
S1=S2=1;
Sn1=Sn2=1;
Sm1=Sm2=0;
Cobegin
Proces s produce get
Begin
L1: 从读卡机读进一张卡片信息:
P(Sn1);
P(S1);
将信息放入buffer1;
V(Sm1);
V(S1); Goto L1
End
Process produce copy
Begin
L2: P(Sm1);
P(S1);
从buffer1复制信息;
V(Sn1);
V(S1);
P(Sn2);
P(S2);
将复制的信息放入buffer2;
V(Sm2);
V(S2);
Goto L2
End
Process produce put
Begin
L3: P(Sm2);
P(S2);
从buffer2取信息;
V(Sn2);
V(S2);
把信息从打印机输出;
Goto L3
End
Coend;
END
【答案解析】