Condividi tramite


Sincronizzazione e chiamate di procedura differite (DPC) con thread

Per sincronizzare l'accesso a una posizione di memoria a cui si accede sia dall'interno che dall'esterno di una routine CustomThreadedDpc , un driver può usare normali blocchi di selezione o blocchi di selezione in coda. In questo caso, il driver deve rispettare determinate regole per eseguire correttamente la sincronizzazione in IRQL = PASSIVE_LEVEL e in IRQL = DISPATCH_LEVEL, perché una routine CustomThreadedDpc può essere eseguita in entrambi i irQLs.

Per un normale blocco spin, si applicano le regole seguenti:

Le regole per gli spin lock in coda sono simili:

Poiché KeAcquireSpinLockForDpc e KeAcquireInStackQueuedSpinLockForDpc non reimpostano l'IRQL quando vengono chiamati a DISPATCH_LEVEL, vengono eseguiti più velocemente, rispettivamente, di KeAcquireSpinLock e KeAcquireInStackQueuedSpinLock.

Per altre informazioni sui blocchi di selezione, vedere Spin Locks.