Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1230 of 1492 menu
◀ ▶

Класс Volatile

Volatile.Read и Volatile.Write запрещают перестановку и чтение «застрявшего» в регистре значения. Они не делают ++ атомарным - для счётчика нужен Interlocked. Ключевое слово volatile у поля - другой механизм с похожей целью видимости, без отдельного урока здесь.

Синтаксис

Volatile.Write(ref location, 12345); int value = Volatile.Read(ref location);

Пример

Давайте записать и прочитать число:

using System; using System.Threading; class Program { static void Main() { int location = 0; Volatile.Write(ref location, 12345); int res = Volatile.Read(ref location); Console.WriteLine(res); } }

Результат выполнения кода:

12345

Пример

Давайте перезаписать значение через Write:

using System; using System.Threading; class Program { static void Main() { int location = 1; Volatile.Write(ref location, 12345); Volatile.Write(ref location, 1); int res = Volatile.Read(ref location); Console.WriteLine(res); } }

Результат выполнения кода:

1

Пример

Давайте сравнить запись с обычным присваиванием в одном потоке:

using System; using System.Threading; class Program { static void Main() { int location = 0; location = 12345; int plain = location; Volatile.Write(ref location, 1); int vol = Volatile.Read(ref location); bool res = plain == 12345 && vol == 1; Console.WriteLine(res); } }

Результат выполнения кода:

True

Смотрите также

  • метод Read,
    прочитать свежее значение
  • метод Write,
    записать с барьером
  • Interlocked,
    атомарный счётчик
  • метод Exchange,
    атомарная подмена
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить