C# 变量赋值和读取是原子操作吗?
我在文件中找不到任何与此相关的参考资料 从线程的角度来看,是否将原子操作分配给double(或任何其他简单类型,包括boolean)C# 变量赋值和读取是原子操作吗?,c#,.net,multithreading,variable-assignment,C#,.net,Multithreading,Variable Assignment,我在文件中找不到任何与此相关的参考资料 从线程的角度来看,是否将原子操作分配给double(或任何其他简单类型,包括boolean) double value = 0; public void First() { while(true) { value = (new Random()).NextDouble(); } } public void Second() { while(true) { Console.WriteLine(value); } } 在这个代码示例中,第
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
在这个代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用。如果第二个方法在赋值给另一个线程中的变量时得到执行,它能得到一个混乱的值吗
我不在乎是否收到旧值,重要的是收到一个有效值(不是设置了8个字节中的2个)。我知道这是个愚蠢的问题,但我想确定一下,因为我不知道CLR实际上是如何设置变量的。回答你的问题,不。双精度赋值不能保证是原子的。这些文件是可用的。基本上,=64位类型不是。对于64位类型的原子操作,可以使用上的方法。这不是一个愚蠢的问题。@EricLippert对象a=10;这也是一个原子操作吗?我读过MSDN,你的文章等,但似乎找不到答案。因为它包括两个步骤。拳击然后assignment@NoOne:变量
a
的变异是原子的,因为object
是引用类型。拳击不在其中。@EricLippert非常感谢Eric。