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

Класс Interlocked

Interlocked делает «прочитать - изменить - записать» одним шагом без гонки. Обычный ++ таким не является. В примерах число получают одним вызовом в одном потоке. Прибавить единицу - Increment, сравнить и подменить - CompareExchange. Свежее чтение без атомарного счётчика - Volatile.

Синтаксис

using System.Threading; int next = Interlocked.Increment(ref location); int swapped = Interlocked.CompareExchange( ref location, 12345, 1);

Пример

Давайте увеличим счётчик через Increment:

using System; using System.Threading; class Program { static void Main() { int location = 0; int res = Interlocked.Increment(ref location); Console.WriteLine(res); } }

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

1

Пример

Давайте прибавим число через Add:

using System; using System.Threading; class Program { static void Main() { int location = 1; int res = Interlocked.Add(ref location, 5); Console.WriteLine(res); } }

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

6

Пример

Давайте подменим значение через Exchange:

using System; using System.Threading; class Program { static void Main() { int location = 1; int old = Interlocked.Exchange(ref location, 12345); Console.WriteLine(old); Console.WriteLine(location); } }

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

1 12345

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

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