我无法在文档中找到对此的任何引用...
从线程的角度来看,给 double(或任何其他简单类型,包括 bool 值)赋值是原子操作吗?
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
在此代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用。如果在另一个线程中对变量赋值期间执行第二个方法,它会得到一个困惑的值吗?
我不关心我是否收到旧值,重要的是收到一个有效值(不是设置了 8 个字节中的 2 个的值)。我知道这是一个愚蠢的问题,但我想确定一下,因为我不知道 CLR 实际上是如何设置变量的。
最佳答案
回答你的问题,没有。不保证对 double 的分配是原子的。文档可用 here .基本上,<= 32 位内置类型是原子的,>= 64 位类型不是。对于 64 位类型的原子操作,您可以使用 System.Threading.Interlocked 上的方法
关于c# - 变量赋值和读取是原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736541/