操作系统(独木桥问题)

请用信号量解决以下的“过独木桥”问题:同一方向的行人可连续过桥,当某一方向 有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥
将独木桥的两个方向分别标记为A和B;并用整形变量countA和countB分别表示A、B方向上已在独木桥上的行人数,初值为0;再设置三个初值都1的互斥信号量:SA用来实现对countA的互斥访问,SB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。则具体描述如下:

将独木桥的两个方向分别标记为A和B;并用整形变量countA和countB分别表示A、B方向上已在独木桥上的行人数,初值为0;再设置三个初值都1的互斥信号量:SA用来实现对countA的互斥访问,SB用来实现对countB的互斥访问,mutex用来实现两个方向的行人对独木桥的互斥使用。则具体描述如下

Var SA,SB,mutex:semaphore:=1,1,1;    
            CountA,countB:integer:=0,0:    
            begin    
              parbegin
                process A: begin   
                     wait(SA);  
                        if(countA=0) then wait(mutex):
                           countA:=countA+1; 
                     signal(SA);
                        过独木桥; 
                     wait(SA);      
                        countA:=countA-1;              
                          if(countA=0) then signal(mutex); 
                     signal(SA);
                             end  

                process B: begin
                  wait(SB); 
                     if(countB=0) then wait(mutex); 
                     countB:=countB+1;
                  signal(SB); 
                  过独木桥;
                  wait(SB);
                  countB:=countB-1;      
                     if (countB=0) then signal(mutex); 
                  signal(SB);
                           end
               parend
             end

你可能感兴趣的:(操作系统)