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



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

我们已经被要求演示如果wait(s)没有被原子地处理是如何违反互斥的。(信号量实现)

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

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

谁能给我指点一下方向吗?

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

参见问题2

让我们假设下面是等待(S)的代码(以galvin为例)

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

如果wait(S)操作不是原子性的,即wait(S)中的所有操作不是同时执行的。两个线程T1和T2同时执行相同的操作等(S)因为等待(S)操作不是原子和T1更新S同时T2的值更新(覆盖值由T1)的实际价值递减是2但同时执行导致只有1递减这个场景被称为竞争条件,这导致一个不正确的统计,导致程序认为它比它真正拥有更多的可用资源。你可以在这里阅读更多关于竞态条件的信息http://en.wikipedia.org/wiki/Race_condition

最新更新