欢迎来到天天文库
浏览记录
ID:46903580
大小:358.50 KB
页数:13页
时间:2019-11-29
《用PV操作实现进程同步的示例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用PV操作实现进程同步的示例示例1设有n个整数环形缓冲区和一个无穷整数序列。进程A逐个地把整数写入环形缓冲区,进程B则逐个地把缓冲区中的整数读出。请回答:(1)叙述A、B进程间的具体制约关系;(2)若信号量S1的初值为0,信号量S2的值是n-1,则下图用PV操作描述的算法有何错误?V(S1);进程A一个整数写入缓冲区;P(S2);P(S1);进程B从缓冲区中取出一个整数;V(S2);2解答:(1)进程A和进程B是合作进程,必须同步。进程A应该超前进程B,但不能超前进程Bn个缓冲单元;进程B不能超前进程A。(2)进程A中V(S1)操作放在“整数写入缓冲区”之前有逻辑错。因为可能进程
2、A执行V(S1)后,在“整数写入缓冲区”之前,进程A被中断而调度进程B执行,进程B将通过P(S1),从而从缓冲区中读取尚未写入的整数,造成错误。3P(S2);进程A一个整数写入缓冲区;V(S1);P(S1);进程B从缓冲区中取出一个整数;V(S2);正确解决方法:设置同步信号量S1,表示开始时缓冲区中没有数据可供进程B读的整数,初值为0;设置同步信号量S2,表示开始时缓冲区中有n个空位置可供进程A送n个整数,初值为n。4示例2生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,系统功能如下:(1)进程A专
3、门拣黑子,进程B专门拣白子;(2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子;(3)当一个进程拣了一个子(黑子或白子)以后,必让另一个进程拣一个子(白子或黑子);用PV操作管理这两个并发进程,使其能正确实现上述功能。5(1)应定义的信号量及初值;(2)在下列的程序中填上适当的P、V操作,以保证它们能正确并发工作。ProcessAbeginL1:①;拣黑子;②;gotoL1;end;V(S2);ProcessBbeginL2:③;拣白子;④;gotoL2;end;信号量S1(允许进程A拣黑子)、S2(允许进程B拣白子),初值为1,0P(S1);P(S2);V(
4、S1);6示例3一条小河上有一座独木桥,规定每次只允许一个人过桥,现河东、河西都有人要过桥,如果把每个过桥者都看做一个进程,为保证安全,请用PV操作管理这两个并发进程,使其能正确实现上述功能。7(1)应定义的信号量及初值;(2)在下列的程序中填上适当的P、V操作,以保证它们能正确并发工作。Process(E-W)i(i=1,2,……)beginL1:①;过桥;②;gotoL1;end;V(S);Process(W-E)i(i=1,2,……)beginL2:③;过桥;④;gotoL2;end;信号量S(允许任一方向的人过桥),初值为1P(S);P(S);V(S);8示例4假定有3个
5、进程R,W1,W2共享一个缓冲器B,B中每次只能存放一个整数。进程R每次启动输入设备读一个整数且把它存放到缓冲器B中。若存放到缓冲器B中的是奇数,则由进程W1将其取出打印,否则,由进程W2将其取出打印。规定进程R存入缓冲器B的数,由进程W1和W2正确无误地打印出来(即要求打印的与存入的完全一致)。要求用PV操作管理这3个并发进程,使它们能正确同步工作。9解答:设3个同步信号量:①empy是进程R的私有信号量,初值为1,表示开始时进程R可向缓冲器B中送一整数;②SW1是进程W1的私有信号量,初值为0,表示开始时缓冲器B中无奇数可供进程W1取;③SW2是进程W2的私有信号量,初值为0
6、,表示开始时缓冲器B中无偶数可供进程W2取;3个进程的同步并发程序如下:structsemaphoreempty,SW1,SW2=1,0,0;intB;cobegin10voidPROCESSR(void){intx;while(TRUE){从输入设备上读一个整数到x;P(empty);B=x;if(x%2==1)V(SW1);elseV(SW2);}}11voidPROCESSSW1(void){inty;while(TRUE){P(SW1);y=B;V(empty);打印y中的数;}}voidPROCESSSW2(void){intz;while(
7、TRUE){P(SW2);z=B;V(empty);打印z中的数;}}1213
此文档下载收益归作者所有