【发布时间】:2011-08-24 09:30:43
【问题描述】:
我正在做一个“操作系统”主题,但我无法理解:
我们被要求演示如果不以原子方式处理等待,会如何违反互斥。 (信号量实现)
现在,我知道这可能会导致计数不正确,从而导致程序认为它拥有比实际更多的可用资源,
但我似乎无法理解这将如何违反互斥的概念:(
谁能给我一些启示或指出正确的方向?
【问题讨论】:
标签: semaphore mutual-exclusion
我正在做一个“操作系统”主题,但我无法理解:
我们被要求演示如果不以原子方式处理等待,会如何违反互斥。 (信号量实现)
现在,我知道这可能会导致计数不正确,从而导致程序认为它拥有比实际更多的可用资源,
但我似乎无法理解这将如何违反互斥的概念:(
谁能给我一些启示或指出正确的方向?
【问题讨论】:
标签: semaphore mutual-exclusion
在 Google 上排名第二(这个问题是第一名):http://web.cs.wpi.edu/~cs502/f98/Waltham/hw2soln.html
见问题 2。
【讨论】:
假设下面是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
【讨论】: