gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:03:52 28 4
gpt4 key购买 nike

我无法在文档中找到对此的任何引用...

从线程的角度来看,给 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com