【发布时间】:2011-02-13 18:12:47
【问题描述】:
我无法在文档中找到对此的任何参考...
从线程的角度来看,分配给 double(或任何其他简单类型,包括布尔值)是否是原子操作?
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
在此代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用。如果第二个方法在分配给另一个线程中的变量期间执行,会得到一个混乱的值吗?
我不在乎是否收到旧值,重要的是收到一个有效值(不是设置了 8 个字节中的 2 个的值)。我知道这是一个愚蠢的问题,但我想确定一下,因为我不知道 CLR 是如何实际设置变量的。
【问题讨论】:
-
这不是一个愚蠢的问题。
-
@EricLippert 对象 a = 10;这也是原子操作吗?我已阅读 MSDN、您的文章等。但似乎无法找到答案。因为它涉及两个步骤。拳击然后分配
-
@NoOne:变量
a的突变是原子的,因为object是一个引用类型。拳击不参与其中。 -
@EricLippert 非常感谢 Eric。
标签: c# .net multithreading variable-assignment