杂技团进行走钢丝表演,在钢丝的A、B两端各有n名演员(n>1)在等待表演。只要钢丝上无人时便允许一名演员从钢丝的一端走到另一端。现要求两端的演员交替地走钢丝,且从A端的一名演员开始。请问,把一名演员看作一个进程时,怎样用PV操作来进行控制?请写出能进行正确管理的程序。
依题意可知,此问题属于进程互斥和同步的混合问题。A.B两端的演员互斥地使用钢丝,A端演员先测试钢丝是否可用,到达B端后发出一个消息,钢丝又可用了, B端演员再出发。需要设置两个信号量:Sl表示A端演员是否在钢丝上,初值为1,表示钢丝上无A端演员,钢丝可用;S2表示B端演员是否在钢丝上,初值为0。过程如下: Begin Sl,S2:semapllore; S l: =1; S2: =0; Cobegin Process A to Bi(i-1,2,……,n) Begin P(S1);/*检测钢丝上是否有A端演员,钢丝是否可用*/ {表演}; V(S2);/*发送消息,B端演员可用钢丝*/ End; Process B to Aj(j=1,2,……,n) Begin P(S2);/*检测钢丝上是否有B端演员,钢丝是否可用*/ {表演}; V(S1);/*发送消息,A端演员可用钢丝*/ End: