鉴于lamport的快速互斥算法,我试图理解为什么会有这样的等待。
算法:
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 我们就不能把它们都去掉吗?
发布于 2010-11-13 21:42:25
当另一个进程/线程处于临界区时,您希望等待(阻塞)而不是旋转(不断执行可用性检查),否则您将占用其他地方可以使用的资源。如果一次只能运行一个线程,那么您将阻止临界区的线程在整个时间片期间运行,从而导致程序需要更长的时间才能完成。
https://stackoverflow.com/questions/4172763
复制相似问题