1

我正在做一个“操作系统”主题,但我无法理解这一点:

我们被要求演示如果不以原子方式处理等待,如何违反互斥。(信号量实现)

现在,我看到这可能会导致计数不正确,导致程序认为它拥有比实际更多的可用资源,

但我似乎无法理解这将如何违反互斥:(

任何人都可以阐明或指出我正确的方向吗?

4

2 回答 2

0

让我们假设下面是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

于 2014-11-13T08:19:28.590 回答
0

谷歌排名第二(这个问题排名第一):http ://web.cs.wpi.edu/~cs502/f98/Waltham/hw2soln.html

见问题 2。

于 2011-09-01T04:10:23.920 回答