Поделиться через


Функция InterlockedCompareExchange (miniport.h)

Подпрограмма InterlockedCompareExchange выполняет атомарную операцию, которая сравнивает входное значение, указанное назначением , со значением Comparand.

Синтаксис

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
            LONG          ExChange,
            LONG          Comperand
);

Параметры

[in, out] Destination

Указатель на входное значение, сравниваемое со значением Comparand.

ExChange

Указывает выходное значение, на которое указывает Destination , если входное значение , на которое указывает Destination, равно значению Comparand.

Comperand

Задает значение, сравниваемое с входным значением, на которое указывает destination.

Возвращаемое значение

InterlockedCompareExchange возвращает исходное значение *Destination.

Комментарии

Если параметр Comparand равен *Destination, то параметру *Destination присваивается значение Exchange. В противном случае значение *Назначение не изменяется.

InterlockedCompareExchange предоставляет быстрый и атомарный способ синхронизации тестирования и обновления переменной, совместно используемой несколькими потоками. Если входное значение, указанное назначением , равно значению Comparand, выходному значению Destination присваивается значение Exchange.

InterlockedCompareExchange предназначен для скорости и, как правило, реализуется встроенным компилятором. InterlockedCompareExchange является атомарным только по отношению к другим вызовам InterlockedXxx . Он не использует спин-блокировку и может безопасно использоваться для страничных данных.

Операции с блокировкой нельзя использовать в некэшированной памяти.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть miniport.h (включая Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
Библиотека OneCoreUAP.lib в Windows 10
IRQL Любой уровень

См. также раздел

ExInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement