1

这里

全局变量 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 会永远等待。被违反的“规则”是否有名称?例如,在线程的上下文中,有“互斥”、“进度”、“有限等待”和“没有关于线程/进程的相对速度的假设”,那么其中一个没有得到满足吗?

4

1 回答 1

1

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

于 2013-10-07T21:03:18.490 回答