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