Funzione ExInterlockedAddUlong (wdm.h)

La routine ExInterlockedAddUlong aggiunge un valore long senza segno a un determinato intero senza segno come operazione atomica.

Sintassi

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

Parametri

[in, out] Addend

Puntatore a un intero long senza segno il cui valore deve essere regolato dal valore Increment.

[in] Increment

Specifica un intero long senza segno da aggiungere.

[in, out] Lock

Puntatore a un blocco di selezione da usare per sincronizzare l'accesso all'Addend.

Valore restituito

ExInterlockedAddUlong restituisce il valore originale (nonsummed) del Addend.

Osservazioni

È consigliabile usare InterlockedExchangeAdd anziché questa routine. InterlockedExchangeAdd può essere più efficiente perché non usa un blocco di selezione ed è inlined dal compilatore.

Si presuppone che le routine di supporto che eseguono operazioni interlock non siano in grado di causare un errore di pagina. Ovvero, né il codice né i dati che toccano possono causare un errore di pagina senza arrestare il sistema. Usano blocchi di selezione per ottenere l'atomicità nei computer multiprocessore simmetrici. Il chiamante deve fornire spazio di archiviazione residente per l'Lock, che deve essere inizializzato con KeInitializeSpinLock prima della chiamata iniziale a un ExInterlockedXxx.

Il blocco passato a exInterlockedAddULong viene utilizzato per garantire che l'operazione di aggiunta in Addend sia atomica rispetto a qualsiasi altra operazione sullo stesso valore che si sincronizza con lo stesso blocco di selezione.

gli interrupt di maschera exInterlockedAddUlong. Di conseguenza, può essere usata per la sincronizzazione tra un ISR e un altro codice driver, purché la stessa Lock non venga mai riutilizzata in una chiamata a una routine eseguita in IRQL = DISPATCH_LEVEL.

Si noti che le chiamate a Xxx interlocked sono sicuramente atomiche rispetto ad altri chiamate interlockedXxx senza blocchi spin forniti dal chiamante.

I chiamanti di ExInterlockedAddUlong eseguiti in qualsiasi IRQL. Lo spazio di archiviazione per il parametro addend deve essere residente in tutti i runtime di integrazione.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile a partire da Windows 2000.
piattaforma di destinazione Universale
intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL Qualsiasi livello (vedere la sezione Osservazioni)

Vedere anche

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock