双标志后检查法:先上锁后检查导致互相等待

P0

flag[0] = true;
while (flag[1]);
critical section;
flag[0] = false;

P1

flag[1] = true;
while (flag[0]);
critical section;
flag[1] = false;

共享状态

flag[0]false
flag[1]false
两个进程还未等待

问题根源:先上锁能避免同时进入,但双方都先上锁时,会把对方都挡在外面。