我试着寻找这个概念,但到处都是我得到的伪代码并没有提供好的解释。请帮助我理解这一点。
答案 0 :(得分:1)
在这种情况下会发生的情况是,当进程A想要进入临界区时,它会将自己的标志设置为true
(这表示A想要进入临界区)但是尝试让B先进入通过将转弯设置为B.
然后,如果B将其标志设置为while ( flag[B] && turn == B);
,则通过true
将其置于保持状态。所以你看到当A想要进入关键部分时,它首先测试B是否也想进入,如果B想要进入,A就把它自己搁置。
这也可能发生在B方面。
所以,如果A和B都决定同时进入关键部分,那么最后设置转弯的人将会等待。这意味着如果B在最后设置turn = A
,那么B将在其while循环中等待 - while ( flag[A] && turn == A);
,A将完成处理临界区,然后取消设置flag[A]
,打破B&#39 ; s while循环然后B将进入临界区本身。
我想您现在可以使用下面的代码了解每个流程的同步步骤。以下是Process-i的代码:
while (true) {
flag[i] = TRUE; // indicating that process-i wants to enter the critical section
turn = j;
// Following WHILE starts and ends in one line. It's called busy-waiting.
while ( flag[j] && turn == j);
FINISH THE CRITICAL SECTION
flag[i] = FALSE; // process-i indicating that it is done now
FINISH THE REMAINDER SECTION
}