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


Макрос ExInterlockedCompareExchange64 (wdm.h)

Подпрограмма ExInterlockedCompareExchange64 сравнивает одну целочисленную переменную с другой и, если они равны, присваивает первой переменной значение, предоставленное вызывающим.

Синтаксис

void ExInterlockedCompareExchange64(
  [in, out]  Destination,
  [in]       Exchange,
             Comperand,
  [in]       Lock
);

Параметры

[in, out] Destination

Указатель на целое число, которое будет сравниваться и, возможно, заменяться.

[in] Exchange

Указатель на целое число, которое заменит значение в destination , если сравнение приводит к равенству.

Comperand

Указатель на целое число, с которым будет сравниваться значение в пункте Назначения .

[in] Lock

Указатель на выделенную вызывающим объектом спин-блокировку, которая используется, если ведущая система не поддерживает 8-байтовую атомарную операцию сравнения и обмена.

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

None

Remarks

Этот макрос заключает в оболочку InterlockedCompareExchange64 или ExfInterlockedCompareExchange64 и предполагает возвращаемое значение типа LONGLONG.

ExInterlockedCompareExchange64 проверяет и, возможно, заменяет значение заданной переменной. Для большинства базовых микропроцессоров эта подпрограмма реализуется компилятором в виде атомарной операции. Если используется спиновая блокировка, эту процедуру можно безопасно использовать только для параметров без пампов.

Если значения Destination и Comparand не равны, ExInterlockedCompareExchange64 просто возвращает значение Destination.

ExInterlockedCompareExchange64 является атомарным только в отношении других вызовов (Ex)InterlockedXxx .

Вызывающие методы ExInterlockedCompareExchange64 могут выполняться в любом IRQL. Хранилище для параметров Destination, Comparand и Exchange , а также записей списка должны находиться во всех списках IRQL.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень (см. раздел "Примечания")

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

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangeAdd