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


Функция 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, равно значению Comperand.

[in] Comperand

Указывает значение, которое сравнивается с входным значением, на которое указывает целевой.

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

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

Замечания

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Всеобщий
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
библиотеки OneCoreUAP.lib в Windows 10
IRQL Любой уровень

См. также

ExInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement