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

Метод CompareExchange

Interlocked.CompareExchange сравнивает текущее значение с comparand. При совпадении записывает newValue и возвращает старое; иначе переменная не меняется, метод возвращает текущее. Без условия - Exchange.

Синтаксис

int original = Interlocked.CompareExchange( ref location, 12345, 1);

Пример

Давайте подменить 1 на 12345 при совпадении:

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

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

1 12345

Пример

Давайте сравнить с неверным 0 - подмены не будет:

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

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

1 1

Пример

Давайте проверить успех через сравнение возврата и comparand:

using System; using System.Threading; class Program { static void Main() { int location = 1; int expected = 1; int res = Interlocked.CompareExchange( ref location, 12345, expected); bool ok = res == expected; Console.WriteLine(ok); } }

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

True

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

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