gpt4 book ai didi

c# - 为什么不可变对象(immutable对象)是线程安全的?

转载 作者:IT王子 更新时间:2023-10-29 04:08:34 26 4
gpt4 key购买 nike

class Unit {
private readonly string name;
private readonly double scale;

public Unit(string name, double scale) {
this.name = name;
this.scale = scale,
}

public string Name { get { return name; } }
public string Scale { get { return scale; } }

private static Unit gram = new Unit("Gram", 1.0);

public Unit Gram { get { return gram; } }
}

多个线程可以访问Unit.Gram。为什么多个线程同时读取 Unit.Gram.Title 可以?

我担心的是它们指的是同一个内存位置。一个线程开始读取该内存,那么它不是被“锁定”了吗? .NET 是否处理下面这个关键部分的同步?还是我认为同步阅读需要同步是错误的?

最佳答案

是什么让对象不是线程安全的?如果对象的值/状态在线程读取时可以更改,则该对象不是线程安全的。如果第二个线程在第一个线程读取该对象的值时更改了该对象的值,通常会发生这种情况。

根据定义,不可变对象(immutable对象)不能更改值/状态。由于每次读取不可变对象(immutable对象)时它都具有相同的值/状态,因此您可以让任意数量的线程毫无顾虑地读取该对象。

关于c# - 为什么不可变对象(immutable对象)是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595114/

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