Является ли Threadsafe .Net POCO?

Этот вопрос может показаться немного странным, но он связан с возможными проблемами видимости. Вопрос вызван случаем в языке программирования Java (> jdk5), примите во внимание:

public class InmutableValue {
  private int value;
  public InmutableValue(int value) {this.value = value;}
  public int getValue() {return value;}
}

Несмотря на противоположное мнение, приведенный выше класс не является потокобезопасным. В многопоточной среде value не гарантируется, что он будет виден другим потокам. Чтобы сделать его потокобезопасным, нам нужно обеспечить соблюдение правила «происходит раньше». Этого можно добиться, пометив поле как «final».

Этот случай заставил меня задуматься, верно ли то же самое для среды выполнения .Net. Возьмем, к примеру:

public class InmutableValue {
  private int value;
  public InmutableValue(int value) {this.value = value;}
  public int Value { get{return value;}}
} 

Насколько мне известно, пометка поля значения как «только для чтения» не дает тех же гарантий, что и «final» для java (но, надеюсь, я могу быть ужасно неправ). Так нужно ли нам отмечать поля как «изменчивые» (или использовать барьеры памяти и т. Д.), Чтобы обеспечить видимость для других потоков? Или применяются другие правила, обеспечивающие видимость?

5
задан M Platvoet 10 April 2011 в 13:01
поделиться