问答题 从读卡机上读进Ⅳ张卡片,然后复制一份,要求复制出来的卡片与读进来的卡片完全一致。这一工作由三个进程get、copy和put以及两个缓冲区buffer1和buffer2完成。进程get的功能是把一张卡片上的信息从读卡机上读进buffer1,进程copy的功能是把buffer1中的信息复制到buffer2,进程put的功能是取buffer2中的信息并从行式打印机上打印输出。试用P、V操作完成这三个进程间的尽可能并发正确运行的关系(用程序或框图表示),并指明信号量的作用及初值。

【正确答案】设互斥信号量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
【答案解析】