ASt*_*Guy 35 .net c# 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在此代码示例中,第一个方法在一个线程中调用,第二个方法在另一个线程中调用.如果第二种方法在另一个线程中赋值变量时获得执行,那么第二种方法是否可以获得混乱值?
我不在乎是否收到旧值,接收有效值(不是设置8个字节中的2个)的唯一重要.我知道这是一个愚蠢的问题,但我想确定,因为我不知道CLR如何实际设置变量.
the*_*oop 24
要回答你的问题,不.对双打的分配不保证是原子的.文档可在此处获得.基本上,<= 32位内置类型是原子类型,> = 64位类型不是.对于64位类型的原子操作,可以使用System.Threading.Interlocked上的方法