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


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

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

Синтаксис

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

Параметры

[in, out] Destination

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

[in] Exchange

Указывает значение PVOID, которое необходимо задать (*Destination).

Comperand

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

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

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

Комментарии

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

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

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

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

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

Требования

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

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

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangePointer