do
{
flag[i]=true;
turn=j;
while(flag[j]&&turn==j);
//临界区 假设i在临界区(flag[i]==true&&turn==j),这时候j已经等待了(flag[j]==true&&turn==i)
flag[i]=false;
//剩余区
}
while(1);
i的:
do
{
turn=j;
while(turn==j);
//临界区
}while(1);
//当i运行到while时,等待j运行完,当j运行完一个循环之后turn=i,这时候i就可以开始运行j的:
do
{
turn=i;
while(turn==i);
//临界区
}while(1);