算法:
start: b[i] = true
x = i
if y != 0 then b[i] = false
await y = 0
goto start
fi
y = i
if x != i then b[i] = false
for j = 1 to n do await b[j] = false od
if y != i then await y = 0
goto start
fi
fi
critical section
y = 0
b[i] = false
我们不能只删除它们吗?
答案 0 :(得分:3)
您希望等待(阻止)而不是旋转(不断执行检查可用性),而另一个进程/线程在关键部分,否则您将占用可在其他地方使用的资源。如果一次只能运行一个线程,那么您将阻止关键部分中的线程在整个时间片期间运行,从而导致程序花费更长的时间来完成。