如果您重新排序这两个命令,您将让这两个进程同时运行:
turn = 1; | turn = 0;
flag[0] = true; | flag[1] = true;
while(flag[1] && turn==1) | while(flag[0] && turn==0)
; | ;
critical section 0 | critical section 1
flag[0] = false; | flag[1] = false;
这可能会按以下顺序执行:
Process 1: turn = 0;
Process 0: turn = 1;
Process 0: flag[0] = true;
Process 0: while(flag[1] && turn==1) // terminates, since flag[1]==false
Process 0: enter critical section 0
Process 1: flag[1] = true;
Process 1: while(flag[0] && turn==0) // terminates, since turn==1
Process 1: enter critical section 1
Process 0: exit critical section 0
Process 1: exit critical section 1
这违反了互斥标准。