问答题 如下图所示,get、copy和put三进程共用两个缓冲区s、t(其大小为每次存放一个记录)。get进程负责不断地把输入数据送人缓冲区s中,copy进程负责从缓冲区s中取出记录然后复制到缓冲区t中,put进程负责从缓冲区t中取出然后打印。试用p、v操作实现这三个进程的同步,写出程序描述。
【正确答案】正确答案:设置四个信号量Sin表示s缓冲区中是否有空位置初值为1,Sout表示S缓冲区中是否有数据初值为0;Tin表示T缓冲区中是否有空位置初值为1,Tout表示T缓冲区中是否有数据初值为0; semaphore Sin=1,Sout=0; semaphore Tin=1,Tout=0; main() cobegin { get: while(1) { P(Sin); 将数放人S; V(Sout); } copy: while(1) { P(Sout); P(Tin): 将数从S取出放入T; V(Tcmt); V(Sin); } put: while(1) { P(Tout); 将数从T取走; V(Tin); } }
【答案解析】