第17题: [多项选择]从读卡机上读进Ⅳ张卡片,然后复制一份,要求复制出来的卡片与读进来的卡片完全一致。这一工作由三个进程get、copy和put以及两个缓冲区buffer1和buffer2完成。进程get的功能是把一张卡片上的信息从读卡机上读进buffer1,进程copy的功能是把buffer1中的信息复制到buffer2,进程put的功能是取buffer2中的信息并从行式打印机上打印输出。试用P、V操作完成这三个进程间的尽可能并发正确运行的关系(用程序或框图表示),并指明信号量的作用及初值。 参考答案:设互斥信号量SA,SB初值为A,分别用于对bufferA和bufferB的互斥访问;同步信号量SnA,SnB初值为A,分别表示bufferA和bufferB初始状态为空闲,可以放一张卡片信息;同步信号量SmA和SmB初值为0,分别表示bufferA和bufferB中的信息还没有被取用(或已被取用了)。用P、V操作完成这三个并发进程间能正确运行的程序如下: BEGIN SA,SB,SnA,SnB,SmA,SmB:semaphore; SA=SB=A; SnA=SnB=A; SmA=SmB=0; Cobegin Proces s produce get Begin LA: 从读卡机读进一张卡片信息: P(SnA); P(SA); 将信息放入bufferA; V(SmA); V(SA); Goto LA End Process produce copy Begin LB: P(SmA); P(SA); 从bufferA复制信息; V(SnA); V(SA); P(SnB); P(SB); 将复制的信息放入bufferB; V(SmB); V(SB); Goto LB End Process produce put Begin LC: P(SmB); P(SB); 从bufferB取信息; V(SnB); V(SB); 把信息从打印机输出; Goto LC End Coend; END