Freigeben über


InterlockedCompareExchangePointer-Funktion (miniport.h)

Die InterlockedCompareExchangePointer-Routine führt einen atomaren Vorgang aus, der den Eingabezeigerwert vergleicht, auf den von Destination mit dem Zeigerwert Comparand verwiesen wird.

Syntax

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

Parameter

[in, out] Destination

Ein Zeiger auf einen PVOID-Wert. Wenn (*Ziel) = Comparand, dann legt die Routine (*Ziel) auf Exchange fest.

[in] Exchange

Gibt den PVOID-Wert an, auf den (*Ziel) festgelegt werden soll.

Comperand

Gibt den PVOID-Wert an, mit dem (**Ziel*) verglichen werden soll.

Rückgabewert

InterlockedCompareExchangePointer gibt den ursprünglichen Wert des Zeigers auf *Ziel zurück (d. a. den Wert dieses Zeigers beim Einstieg in die Routine).

Hinweise

Wenn Comparand gleich *Ziel ist, wird *Ziel auf Exchange festgelegt. Andernfalls bleibt *Ziel unverändert.

InterlockedCompareExchangePointer bietet eine schnelle, atomare Möglichkeit zum Synchronisieren des Testens und Aktualisierens einer Zeigervariable, die von mehreren Threads gemeinsam genutzt wird. Wenn der Eingabewert, auf den von Destination verwiesen wird, dem Wert von Comparand entspricht, wird der Wert, auf den von Destination verwiesen wird, auf den Wert von Exchange festgelegt.

InterlockedCompareExchangePointer ist auf Geschwindigkeit ausgelegt und wird in der Regel inline von einem Compiler implementiert. InterlockedCompareExchangePointer ist nur in Bezug auf andere interlockedXxx-Aufrufe atomar. Es verwendet keine Spinsperre und kann sicher für auslagerungsfähige Daten verwendet werden.

Die InterlockedCompareExchangePointer-Routine ist nur in Bezug auf andere interlockedXxx-Aufrufe atomar.

Ineinander verriegelte Vorgänge können nicht für nicht zwischengespeicherten Arbeitsspeicher verwendet werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Desktop
Kopfzeile miniport.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
IRQL Beliebige Ebene

Weitere Informationen

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangePointer