从这里
全局变量 turn 用于指示下一个进程进入临界区。turn 的初始值可以是 0 或 1。
int turn = 1;
T0:
while (true) {
while (turn != 0) { ; } (1)
critical section (2)
turn = 1; (3)
non-critical section (4)
}
T1:
while (true) {
while (turn != 1) { ; } (1)
critical section (2)
turn = 0; (3)
non-critical section (4)
}
我不明白问题是什么。为什么T0会while (turn != 1)
永远重复?如果上下文切换到 T1 那么它将进入它的关键部分然后设置turn=0
。
编辑:我现在明白为什么 T0 会永远等待。被违反的“规则”是否有名称?例如,在线程的上下文中,有“互斥”、“进度”、“有限等待”和“没有关于线程/进程的相对速度的假设”,那么其中一个没有得到满足吗?