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/