来自here
全局变量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会永远等待。是否存在违反“规则”的名称?例如,在线程的上下文中,“互斥”,“进度”,“有限等待”和“没有假设线程/进程的相对速度“其中一个没有得到满足?
答案 0 :(得分:1)
您缺少问题描述中的第二个假设: 线程可以在非关键部分终止。您在此处复制的描述指定“T1终止于非关键部分”,因此T1将永远不再设置turn = 0。