代码之家  ›  专栏  ›  技术社区  ›  Mark

对同一内存地址的并发写入

  •  6
  • Mark  · 技术社区  · 16 年前

    如果两个线程同时尝试写入同一地址,那么并发写入后的值是否保证是线程尝试写入的值之一?或者有可能得到位的组合吗?

    另外,当位处于不稳定状态时,另一个线程是否可能读取内存地址?

    我猜问题归结起来是,如果对单个内存地址的读或写在硬件级别上是原子的。

    5 回复  |  直到 16 年前
        1
  •  5
  •   Brian    16 年前

    我认为这一切都取决于特定编程语言或系统的“内存模型”。

        2
  •  2
  •   Boris Pavlović    16 年前

        3
  •  1
  •   SimonJ    16 年前

    在某些情况下,当两个线程写入时,结果可能同样不可预测 不同的

    Threads cannot be implemented as a library “涵盖了这一点以及并发性的其他怪癖。

        4
  •  0
  •   Pascal Cuoq    16 年前

    在多处理器计算机上,可能没有读取的单个“值”。两个线程和第三个线程可能会看到不一致的值。您需要一个内存屏障来确保每个线程在此地址看到相同的值。

        5
  •  0
  •   sud03r    16 年前

    可以肯定的是,对于大小等于CPU寄存器的数据类型,其位永远不会处于不稳定状态,它将是两个值中的任何一个