确保关键部分不被中断的算法有什么问题?

时间:2013-10-07 20:40:53

标签: multithreading algorithm language-agnostic deadlock race-condition

来自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)
}

screen shot of solution to problem I don't get

我不明白问题是什么。为什么T0会永远重复while (turn != 1)?如果上下文切换到T1,那么它将进入它的关键部分,然后设置turn=0

编辑:我现在看到为什么T0会永远等待。是否存在违反“规则”的名称?例如,在线程的上下文中,“互斥”,“进度”,“有限等待”和“没有假设线程/进程的相对速度“其中一个没有得到满足?

1 个答案:

答案 0 :(得分:1)

您缺少问题描述中的第二个假设: 线程可以在非关键部分终止。您在此处复制的描述指定“T1终止于非关键部分”,因此T1将永远不再设置turn = 0。