Метод 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