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


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

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

Синтаксис

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

Параметры

[in, out] Destination

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

[in] ExChange

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

[in] Comperand

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

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

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

Комментарии

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

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

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

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

Требования

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

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

ExInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement