这个问题可能看起来有些奇怪,但与可能的可见性问题有关.这个问题的灵感来自Java编程语言(> jdk5)中的一个案例,考虑:
public class InmutableValue {
private int value;
public InmutableValue(int value) {this.value = value;}
public int getValue() {return value;}
}
Run Code Online (Sandbox Code Playgroud)
尽管有相反的信念,但上述课程并非线程安全.在多线程环境中,"value"不保证对其他线程可见.为了使其成为线程安全,我们需要强制实施"先发生"规则.这可以通过标记字段'final'来完成.
这个案例让我想知道.Net运行时是否也是如此.所以举个例子:
public class InmutableValue {
private int value;
public InmutableValue(int value) {this.value = value;}
public int Value { get{return value;}}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,将值字段标记为'readonly'不会给出与'final'对java相同的保证(但我可能非常错误,希望如此).那么我们是否需要将字段标记为"易变"(或使用内存屏障等)以确保其他线程的可见性?或者是否有其他规则可以确保可见性?