322 Peterson算法 Dekker算法可以解决互斥问题,但是, 其复杂的程序难于理解,其正确性难于 证明。 Peterson给出了一个简单的方法。 下面是一个两进程互斥的简单解决方法, 进一步可将 Peterson算法推广到多个进程 的情况。 16
16 3.2.2 Peterson算法 Dekker算法可以解决互斥问题,但是, 其复杂的程序难于理解,其正确性难于 证明。Peterson给出了一个简单的方法。 下面是一个两进程互斥的简单解决方法, 进一步可将Peterson算法推广到多个进程 的情况
322 Peterson算法 var flag: array[o.1]of boolean flag 1]: =true turn: 0..1 turn: =0 procedure p while flaglo] and turn=0 do nothing begin 〈 critical section repeat flag[1]: =false flag[o]:=true remainder In forever while flag 1] and turn=l do nothing end 〈 critical section〉 begin flag[o]: =false; flag[0]: =false 〈 remainder flag[ 1]: -false forever turn:=1 end parbegin procedure P begin parend repeat end 17
17 3.2.2 Peterson算法 var flag: array[0..1] of boolean; flag[1]: =true; turn: 0..1; turn: =0; procedure P0 ; while flag[0] and turn=0 do {nothing}; begin 〈critical section〉; repeat flag[1]: =false; flag[0]: =true; 〈remainder〉 turn: =1; forever while flag[1] and turn=1 do {nothing}; end; 〈critical section〉; begin flag[0]: =false; flag[0]: =false; 〈remainder〉 flag[1]: =false; forever turn: =1; end; parbegin procedure P1 ; P0 ; P1 begin parend repeat end