代码之家  ›  专栏  ›  技术社区  ›  Jacek Ławrynowicz

多个CPU可以同时写入同一个RAM位置吗?

  •  4
  • Jacek Ławrynowicz  · 技术社区  · 17 年前

    机器字大小(或更小)的写入是否序列化?将寄存器内容复制到RAM只需要一个本机操作码。

    6 回复  |  直到 17 年前
        1
  •  4
  •   Adam Rosenfield    17 年前

    将数据写入RAM是原子的。如果两个CPU同时尝试写入同一位置,内存控制器将决定写入的顺序。当一个CPU正在写入内存时,另一个CPU将根据需要暂停任意多个周期,直到第一次写入完成;然后它将覆盖其值。这就是所谓的 race condition .

    小于本机字大小的写入不是原子的——在这种情况下,CPU必须将旧内存值读取到寄存器中,将新字节写入寄存器,然后将新值写入内存。

    您永远不应该有依赖于此的代码——如果您有多个CPU试图同时写入同一个内存位置,则说明您做错了什么。

    另一个重要考虑是 cache coherency 问题。每个CPU都有自己的缓存。如果一个CPU将数据写入其缓存,那么如果其他CPU想要读取数据,就需要知道对该数据值的更改。

        2
  •  2
  •   xelurg    17 年前

    没有什么能阻止你在低水平上做这件事。但是,RAM写操作是原子的,因此内存控制器将从核心顺序执行两个看起来类似的写操作。

        3
  •  0
  •   Zachery Delafosse    17 年前

    两个CPU可以同时发出命令,但是RAM控制器不必分别处理它接收到的每个命令吗?所以,可能对CPU来说,它是同时的,但是RAM控制器将决定先处理谁的命令。

        4
  •  0
  •   Zach Scrivena    17 年前

    它们不应该这样做,因为如果写入不同的值,结果RAM内容将是未指定的。

        5
  •  0
  •   community wiki ChrisW    17 年前

    这个本地操作码是否比直接写入RAM更可能写入CPU缓存?

        6
  •  0
  •   MSN    17 年前

    他们可以尝试,但硬件将是最终决定因素。