Этот вопрос может показаться немного странным, но он связан с возможными проблемами видимости.Вопрос вдохновлен случаем на языке программирования Java (> jdk5), рассмотрим:
public class InmutableValue {
private int value;
public InmutableValue(int value) {this.value = value;}
public int getValue() {return value;}
}
Несмотря на противоположное мнение, класс выше не является потокобезопасным.В многопоточной среде «значение» не гарантируется для других потоков.Чтобы сделать его потокобезопасным, нам нужно применить правило «до того, как это произойдет».Это можно сделать, отметив поле 'final'.
. Этот случай заставил меня задуматься, верно ли то же самое для среды выполнения .Net.Возьмем, к примеру:
public class InmutableValue {
private int value;
public InmutableValue(int value) {this.value = value;}
public int Value { get{return value;}}
}
Насколько я знаю, пометка поля значения как «только для чтения» не дает тех же гарантий, что и «финал» для java (но я могу быть ужасно неправ, надеюсь),Так нужно ли нам помечать поля как «изменчивые» (или использовать барьеры памяти и т. Д.), Чтобы обеспечить видимость другим потокам?Или применяются другие правила, обеспечивающие видимость?