Freigeben über


ExInterlockedCompareExchange64-Makro (wdm.h)

Die ExInterlockedCompareExchange64- Routine vergleicht eine ganzzahlige Variable mit einer anderen und legt, falls sie gleich sind, die erste Variable auf einen vom Aufrufer bereitgestellten Wert fest.

Syntax

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

Parameter

[in, out] Destination

Ein Zeiger auf eine ganze Zahl, die verglichen und möglicherweise ersetzt wird.

[in] Exchange

Ein Zeiger auf eine ganze Zahl, die die zahl bei Destination ersetzt, wenn der Vergleich zu Gleichheit führt.

Comperand

Ein Zeiger auf eine ganze Zahl, mit der der Wert bei Ziel- verglichen wird.

[in] Lock

Ein Zeiger auf eine vom Anrufer zugewiesene Spin-Lock, die verwendet wird, wenn das Hostsystem keinen 8-Byte-Atomabgleich-und-Austauschvorgang unterstützt.

Rückgabewert

Nichts

Bemerkungen

Dieses Makro umschließt InterlockedCompareExchange64 oder ExfInterlockedCompareExchange64 und geht vom Rückgabewert des Typs LONGLONG aus.

ExInterlockedCompareExchange64 Tests und ersetzt ggf. den Wert einer bestimmten Variablen. Für die meisten zugrunde liegenden Mikroprozessoren wird diese Routine vom Compiler inline implementiert, um als atomische Operation auszuführen. Wenn eine Drehsperre verwendet wird, kann diese Routine nur sicher für nicht seitenseitige Parameter verwendet werden.

Wenn die Destination und Comparand ungleich sind, gibt ExInterlockedCompareExchange64 einfach den Wert Destinationzurück.

ExInterlockedCompareExchange64- ist nur in Bezug auf andere (Ex)InterlockedXxx Aufrufe atomar.

Aufrufer von ExInterlockedCompareExchange64- können bei jedem IRQL ausgeführt werden. Der Speicher für den Parameter Destination, Comparand und Exchange und die Listeneinträge müssen auf allen IRQLs gespeichert sein.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- Beliebige Ebene (siehe Abschnitt "Hinweise")

Siehe auch

InterlockedCompareExchange

InterlockedExchange-

InterlockedExchangeAdd-