Freigeben über


ExInterlockedAddUlong-Funktion (wdm.h)

Die ExInterlockedAddUlong Routine fügt einem bestimmten ganzzahligen Wert ohne Vorzeichen als Atomoperation einen unsignierten Longwert hinzu.

Syntax

ULONG ExInterlockedAddUlong(
  [in, out] PULONG      Addend,
  [in]      ULONG       Increment,
  [in, out] PKSPIN_LOCK Lock
);

Parameter

[in, out] Addend

Ein Zeiger auf eine nicht signierte lange ganze Zahl, deren Wert durch den wert Increment angepasst werden soll.

[in] Increment

Gibt eine nicht signierte lange ganze Zahl an, die hinzugefügt werden soll.

[in, out] Lock

Ein Zeiger auf eine Drehsperre, die zum Synchronisieren des Zugriffs auf die Addend-verwendet werden soll.

Rückgabewert

ExInterlockedAddUlong-gibt den ursprünglichen (unsummen) Wert des Addendzurück.

Bemerkungen

Erwägen Sie die Verwendung von InterlockedExchangeAdd anstelle dieser Routine. InterlockedExchangeAdd effizienter sein kann, da sie keine Drehsperre verwendet und vom Compiler inlineiert wird.

Supportroutinen, die verriegelte Vorgänge ausführen, werden angenommen, dass sie nicht in der Lage sind, einen Seitenfehler zu verursachen. Das heißt, weder ihr Code noch eine der Daten, die sie berühren, können zu einem Seitenfehler führen, ohne das System aufzurufen. Sie verwenden Drehsperren, um Atomität auf symmetrischen Multiprozessormaschinen zu erreichen. Der Aufrufer muss residenten Speicher für die Lockbereitstellen, die mit KeInitializeSpinLock initialisiert werden muss, bevor der anfängliche Aufruf eines ExInterlockedXxx.

Die Lock, die an ExInterlockedAddULong übergeben wird, wird verwendet, um sicherzustellen, dass der Add-Vorgang auf Addend in Bezug auf alle anderen Vorgänge auf demselben Wert atomisiert ist, die mit dieser Drehsperre synchronisiert werden.

ExInterlockedAddUlong Masken unterbricht. Daher kann sie für die Synchronisierung zwischen einem ISR und einem anderen Treibercode verwendet werden, vorausgesetzt, das gleiche Lock wird nie in einem Aufruf einer Routine wiederverwendet, die bei IRQL = DISPATCH_LEVEL ausgeführt wird.

Beachten Sie, dass Anrufe an InterlockedXxx in Bezug auf andere InterlockedXxx Aufrufe ohne von Aufrufern bereitgestellte Drehsperren atomar sind.

Aufrufer von ExInterlockedAddUlong bei jedem IRQL ausgeführt. Der Speicher für den Addend Parameter muss bei allen IRQLs vorhanden 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

ExInterlockedAddLargeInteger

InterlockedDecrement-

InterlockedIncrement-

KeInitializeSpinLock