我正在做一个“操作系统”主题,但我无法理解这一点:
我们被要求演示如果不以原子方式处理等待,如何违反互斥。(信号量实现)
现在,我看到这可能会导致计数不正确,导致程序认为它拥有比实际更多的可用资源,
但我似乎无法理解这将如何违反互斥:(
任何人都可以阐明或指出我正确的方向吗?
我正在做一个“操作系统”主题,但我无法理解这一点:
我们被要求演示如果不以原子方式处理等待,如何违反互斥。(信号量实现)
现在,我看到这可能会导致计数不正确,导致程序认为它拥有比实际更多的可用资源,
但我似乎无法理解这将如何违反互斥:(
任何人都可以阐明或指出我正确的方向吗?
让我们假设下面是wait(S)的代码(galvin的例子)
wait(S) {
while (S <= 0 )
; // busy wait
S--;
}
如果 wait(S) 操作不是原子的,即 wait(S) 中的所有操作不会一次全部执行。两个线程 T1 和 T2 同时执行相同的操作 wait(S),因为 wait(S) 操作不是原子的并且 T1 更新 S 的值,同时 T2 更新(覆盖 T1 写入的值) S 的值的实际递减量为 2,但同时执行导致仅递减 1 这种情况称为竞争条件,这导致计数不正确,导致程序认为它拥有比实际更多的可用资源。您可以在此处阅读有关竞争条件的更多信息http://en.wikipedia.org/wiki/Race_condition
谷歌排名第二(这个问题排名第一):http ://web.cs.wpi.edu/~cs502/f98/Waltham/hw2soln.html
见问题 2。