【问题标题】:Do mutual exclusion algorithms require atomic loads and stores?互斥算法是否需要原子加载和存储?
【发布时间】:2016-11-15 17:08:36
【问题描述】:

我了解互斥算法(例如 Dekker 算法和 Peterson 算法)需要底层顺序一致的内存模型才能工作(或使用内存屏障),但我不清楚它们是否需要原子加载和存储。在彼得森算法的wikipedia entry 中,它说:

该算法满足解决临界区问题的三个基本标准,前提是对变量 turn、flag[0] 和 flag1 的更改立即以原子方式传播。

我不清楚上面引用的位以及这是否意味着算法需要原子加载和存储才能工作。查看彼得森的算法,我不明白为什么需要原子加载和存储才能使其工作。我在Dekker's algorithm wikipedia entry 中没有看到这种原子性要求。那么彼得森的算法是否需要原子加载和存储,这是否扩展到所有互斥算法?

【问题讨论】:

    标签: multithreading algorithm concurrency synchronization mutual-exclusion


    【解决方案1】:

    是的,它确实要求它们是原子的。 Dekker 的算法也是如此。

    假设 turn 和 flag 不是原子的。这意味着P0可以设置turnflag[0],但是有一段时间P1仍然可以将它们视为未设置,并且可以进入其临界区。对称地,P0也可以进入CS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 2011-12-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多