Функция 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 | Любой уровень |