Начиная с Java 5, ключевое слово volatile
имеет семантику освобождения / приобретения, чтобы побочные эффекты были видны другим потокам (включая присвоения энергонезависимых переменных!).Возьмите эти две переменные, например:
int i;
volatile int v;
Обратите внимание, что i
является обычной, энергонезависимой переменной.Представьте себе, что поток 1 выполняет следующие операторы:
i = 42;
v = 0;
В какой-то более поздний момент времени поток 2 выполняет следующие операторы:
int some_local_variable = v;
print(i);
В соответствии с моделью памяти Java записьv
в потоке 1, за которым следует чтение v
в потоке 2, гарантирует, что поток 2 видит запись в i
, выполненную в потоке 1, поэтому выводится значение 42.
Мой вопрос:volatile
имеет ту же семантику выпуска / приобретения в C #?