【问题标题】:violating mutual exclusion with non atomic wait(s) - Semaphores违反与非原子等待的互斥 - 信号量
【发布时间】:2011-08-24 09:30:43
【问题描述】:

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

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

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

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

谁能给我一些启示或指出正确的方向?

【问题讨论】:

    标签: semaphore mutual-exclusion


    【解决方案1】:

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

    见问题 2。

    【讨论】:

    • 已知事实:Google 可能会针对不同的人和/或不同的计算机和/或不同的浏览器显示不同的结果。
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-24
      • 2012-09-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多