В чём смысл Interlocked.CompareExchange?

В документации есть метод: System.Threading.Interlocked.CompareExchange
Ссылка: https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.interlocked.compareexchange?view=netcore-3.1
Судя по описанию - он выполняет сравнение с использованием механизма ссылок, вопрос зачем?
Скорее всего я понял не правильно, что в результате сравнения он подменяет ссылку.
Это такая хитрая система экономии ресурсов?

Если это не так - то что делает данный метод и зачем?
И вообще при чём здесь потоки?


Ответы (2 шт):

Автор решения: MBo

Смысл CompareExchange в том, что комплекс операций сравнения и замены выполняется атомарно, другие потоки не могут вклиниться в этот процесс.

Дело в том, что при использовании последовательности операторов

if (a==b) 
    a = c;

в многопоточном окружении между сравнением и заменой другой поток может модифицировать значения a, b или c, и результат будет непредсказуем.

→ Ссылка
Автор решения: Alexander Petrov

Сравнение с обменом - атомарная операция, используемая для реализации неблокирующих (lock-free) алгоритмов.

Такие алгоритмы во многих случаях (не всегда!) оказываются предпочтительней, чем реализации с блокировками.

Некоторые потокобезопасные коллекции в современном дотнете используют внутри себя такие операции.

→ Ссылка