【问题标题】:Is memory barrier meaningful only in SMP?内存屏障是否仅在 SMP 中有意义?
【发布时间】:2012-03-08 08:25:43
【问题描述】:

我明白为什么需要内存屏障,但我不明白单处理器的情况。

即使我使用 UP,我也必须处理障碍吗?每个文档都用 SMP 而不是 UP 来解释它们。

在下面的代码中,r2 == 0在a点有没有可能?

// the location 0xdeadbeef has a zero initial value
ldr r0, =0xdeadbeef
ldr r1, =0xdeadbeef
ldr r2, =1
str r2, [r0]
ldr r2, [r1]
// point a

【问题讨论】:

  • 可能与超标量乱序单处理器相关。它确实应该由处理器的内存模型和指令集指定。 (邪恶在细节中)。
  • @Basile:我不这么认为——铁律是在单个处理器上执行单个线程总是会产生以下影响。

标签: concurrency atomic memory-barriers


【解决方案1】:

有内存屏障和编译器屏障。

单个处理器不需要内存屏障(我不确定超线程是否算作多个处理器),但编译器屏障是 - 编译器可以在不同的线程中重新排序代码,这样你就会失败。

【讨论】:

    【解决方案2】:

    内存屏障只能用于“全局变量”。因为在线程切换时会自动保存本地(堆栈中)和寄存器。

    可能普遍性比假设你总是处理 UP 更好

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 1970-01-01
      • 2010-12-30
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多