Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量赋值和读取是原子操作吗?_C#_.net_Multithreading_Variable Assignment - Fatal编程技术网

C# 变量赋值和读取是原子操作吗?

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(或任何其他简单类型,包括boolean)

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。