代码之家  ›  专栏  ›  技术社区  ›  Weyland Yutani

当另一个线程更新一个int[]数组时,从该数组中读取是否安全?

c#
  •  3
  • Weyland Yutani  · 技术社区  · 12 年前

    两个线程。 第一个疯狂地从数组中读取元素。 第二种方法同样愤怒地通过读取元素并将其递增任意数量来更新元素。

    这安全吗?在这种情况下会出什么问题吗?我不介意读取线程读取“旧”值,而更新线程仍在更新过程中。我只想确保读者永远不会读到未写的数字,也不会发生异常。

    2 回复  |  直到 12 年前
        1
  •  9
  •   Hans Passant    12 年前

    int 在所有可以执行托管代码的cpu体系结构上,更新都是原子的。换句话说,您不会读取只有一个字节被写入线程修改的值。大于32位的值类型值,如 long double 不能保证是原子的。对象引用也总是原子的。

        2
  •  1
  •   Daniel A. White    12 年前

    这不是线程安全的——不能保证一个线程得到正确的数据。