35
我无法在文档中找到对此的任何引用...是变量赋值和读取原子操作吗?
是分配给双线(或任何其他简单类型,包括布尔值)从线程角度查看的原子操作吗?
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
在此代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用。如果第二个方法在赋值给另一个线程中的变量时得到它的执行,第二个方法会得到一个混乱的值吗?
我不在乎我是否收到旧值,只有接收到一个有效值(不是一个设置了8个字节中的2个)才是重要的。我知道这是一个愚蠢的问题,但我想确定,因为我不知道CLR如何设置变量。
上的方法这不是一个愚蠢的问题。 – 2010-04-29 14:17:57
@EricLippert对象a = 10;这是一个原子操作呢?我已阅读MSDN,您的文章等,但似乎无法找到答案。因为它涉及2个步骤。拳击,然后分配 – Ehsan 2013-08-23 07:25:19
@NoOne:变量'a'的变异是原子的,因为'object'是一个引用类型。拳击没有进入它。 – 2013-08-23 13:48:46