Модификатор 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"