Condividi tramite


Funzione ExInterlockedAddUlong (wdm.h)

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

Sintassi

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

Parametri

[in, out] Addend

Puntatore a un intero lungo senza segno il cui valore deve essere modificato dal valore Increment .

[in] Increment

Specifica un intero lungo senza segno da aggiungere.

[in, out] Lock

Puntatore a un blocco di rotazione da usare per sincronizzare l'accesso all'addend.

Valore restituito

ExInterlockedAddUlong restituisce il valore originale (nonsummed) dell'oggetto Addend.

Commenti

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

Le routine di supporto che eseguono operazioni interlock si presuppone che non siano in grado di causare un errore di pagina. Ovvero, né il codice né nessuno dei dati che toccano può causare un errore di pagina senza ridurre il sistema. Usano blocchi di rotazione per ottenere l'atomicità nei computer multiprocessore simmetrici. Il chiamante deve fornire l'archiviazione residente per il blocco, che deve essere inizializzato con KeInitializeSpinLock prima della chiamata iniziale a un xxx exInterlocked.

Il blocco passato a ExInterlockedAddULong viene usato per garantire che l'operazione di aggiunta su Addend sia atomica rispetto a tutte le altre operazioni sullo stesso valore che si sincronizzano con lo stesso blocco spin.

Interruzioni delle maschere exInterlockedAddUlong. Di conseguenza, può essere usato per la sincronizzazione tra un ISR e un altro codice driver, purché lo stesso blocco non venga mai riutilizzato in una chiamata a una routine eseguita in IRQL = DISPATCH_LEVEL.

Si noti che le chiamate a Interlocked Xxx devono essere atomiche rispetto ad altre chiamate Xxx interlocked senza blocchi di spin forniti dal chiamante.

I chiamanti di ExInterlockedAddUlong vengono eseguiti in qualsiasi IRQL. L'archiviazione per il parametro Addend deve essere residente in tutti i file IRQLs.

Requisiti

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)

Vedi anche

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock