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) |