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

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

Синтаксис

PVOID InterlockedCompareExchangePointer(
  [in, out] PVOID volatile *Destination,
  [in]      PVOID          Exchange,
  [in]      PVOID          Comperand
);

Параметры

[in, out] Destination

Указатель на значение PVOID. Если (*Destination) = Comperand, подпрограмма устанавливает (*Destination) значение Exchange.

[in] Exchange

Указывает значение PVOID для задания (*Назначение).

[in] Comperand

Указывает значение PVOID для сравнения с (*Назначение).

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

InterlockedCompareExchangePointer возвращает исходное значение указателя на *Назначение (то есть значение этого указателя при входе в подпрограмму).

Комментарии

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

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

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

Подпрограмма InterlockedCompareExchangePointer атомарна только по отношению к другим вызовам InterlockedXxx .

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

Требования

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

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

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangePointer