Начиная с 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 #?