我正在做一个'操作系统'主题,我无法理解这个:
我们被要求证明如果不按原子方式处理等待,可以如何违反互斥。 (信号量实施)
现在,我看到这可能会导致不正确的计数,从而导致程序认为它拥有的资源比实际可用资源更多,
但我似乎无法理解这将如何违反互斥的概念:(
任何人都能解开一些亮点或指向正确的方向吗?
答案 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