违反互斥与非原子等待 - 信号量

时间:2011-08-24 09:30:43

标签: semaphore mutual-exclusion

我正在做一个'操作系统'主题,我无法理解这个:

我们被要求证明如果不按原子方式处理等待,可以如何违反互斥。 (信号量实施)

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

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

任何人都能解开一些亮点或指向正确的方向吗?

2 个答案:

答案 0 :(得分:0)

Google上的第二个结果(此问题排在第一位):http://web.cs.wpi.edu/~cs502/f98/Waltham/hw2soln.html

见问题2。

答案 1 :(得分:0)

让我们假设下面是等待(S)的代码(加尔文的例子)

 wait(S) {
         while (S <= 0 )
         ; // busy wait
         S--;
}

如果wait(S)操作不是原子操作,那么wait(S)内的所有操作都不会立即执行。由于wait(S)操作,两个线程T1和T2同时执行相同的操作wait(S)不是原子,T1更新S的值,同时T2更新(覆盖T1写入的值)S值的实际减量为2,但同时执行仅导致减1这种情况称为竞赛条件,这导致错误的计数,导致程序认为它有更多的资源可用。你可以在这里阅读更多有关种族条件http://en.wikipedia.org/wiki/Race_condition