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

Модификатор volatile

volatile применяют к полям простых типов, ссылок и указателей. Он не делает операции атомарными для сложных выражений, но гарантирует, что каждое обращение идёт в память. Для согласованности нескольких полей обычно используют lock.

Синтаксис

private volatile тип поле;

Пример

Давайте объявим volatile флаг остановки:

using System; class Worker { public volatile bool StopRequested; public void RequestStop() { StopRequested = true; } } class Program { static void Main() { var worker = new Worker(); worker.RequestStop(); Console.WriteLine(worker.StopRequested); } }

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

True

Пример

Давайте прочитаем volatile счётчик после записи:

using System; class Stats { public volatile int Count; public void Increment() { Count++; } } class Program { static void Main() { var stats = new Stats(); stats.Increment(); Console.WriteLine(stats.Count); } }

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

1

Пример

Давайте сменим volatile ссылку на строку:

using System; class Holder { public volatile string Current = "12345"; public void SetCurrent(string value) { Current = value; } } class Program { static void Main() { var holder = new Holder(); holder.SetCurrent("abcde"); Console.WriteLine(holder.Current); } }

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

"abcde"

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

  • lock,
    который защищает блок кода в потоках
  • readonly,
    который запрещает перезапись поля
  • static,
    который задаёт общее поле типа
  • async,
    который описывает асинхронный метод
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить