gpt4 book ai didi

c - 为什么peterson的互斥解决方案需要turn == process作为while循环中的条件?

转载 作者:行者123 更新时间:2023-11-30 16:46:31 26 4
gpt4 key购买 nike

我正在尝试了解 Peterson 提供的互斥问题的解决方案。所以这是彼得森的互斥解决方案:

int No_Of_Processes; // Number of processes
int turn; // Whose turn is it?
int interested[No_Of_Processes]; // All values initially FALSE

void enter_region(int process) {
int other; // number of the other process

other = 1 - process; // the opposite process
interested[process] = TRUE; // this process is interested
turn = process; // set flag
while(turn == process && interested[other] == TRUE); // wait
}

void leave_region(int process) {
interested[process] = FALSE; // process leaves critical region
}

我不明白他为什么在idle while循环中使用turn == process。这看起来很矛盾,因为如果另一个进程想要进入临界区,则将turn设置为另一个进程,这意味着前一个进程也可以进入临界区,而不管感兴趣的缓冲区的内容。

最佳答案

考虑以下执行顺序以了解为什么需要该条件:

“其他”进程执行以下操作:

interested[other] = TRUE
turn = other

此时,“其他”进程将切换上下文,并且执行当前相关进程:

interested[process] = TRUE
turn = process

所以此时我们有:

interested[other] = TRUE
interested[process] = TRUE
turn = process

在这种情况下,“其他”进程将进入临界区。但这个过程不会像 (turn == process &&interested[other] == TRUE) 那样为真。该进程将等待,直到其他进程执行interested[other] = FALSE;

关于c - 为什么peterson的互斥解决方案需要turn == process作为while循环中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com