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是否处理下面这个关键部分的同步?或者我错在认为同步阅读需要同步?
“我担心的是他们指的是相同的内存位置。”他们?也许。这不是你关心的问题,这是虚拟机的问题。同步阅读不需要同步,为什么呢? – 2010-08-29 14:43:37
*“为什么会这样”* >>这不是问题吗?如果我读到女友读的同一本书,同时我们总是会为此而战。我知道它在计算机上并不是问题(两个线程同时读取不会发生,CPU架构会照顾它),但我觉得它是一个非常合法的问题:) – Abel 2010-08-29 14:58:54
读一本书涉及一个可变状态(当前页面,闪电等)。你不是在为这本书而战,而是在处理它。 – sisve 2010-08-29 17:27:24