Freigeben über


Synchronisierung und Thread-DPCs

Um den Zugriff auf einen Speicherort zu synchronisieren, auf den sowohl innerhalb als auch außerhalb einer CustomThreadedDpc-Routine zugegriffen wird, kann ein Treiber gewöhnliche Spinlocks oder Warteschlangensperren verwenden. Dabei muss der Treiber bestimmte Regeln befolgen, um bei IRQL = PASSIVE_LEVEL und bei IRQL = DISPATCH_LEVEL ordnungsgemäß zu synchronisieren, da eine CustomThreadedDpc-Routine bei beiden IRQLs ausgeführt werden kann.

Für eine normale Drehsperre gelten die folgenden Regeln:

Die Regeln für Drehsperren in der Warteschlange sind ähnlich:

Da KeAcquireSpinLockForDpc und KeAcquireInStackQueuedSpinLockForDpc die IRQL nicht zurücksetzen, wenn sie bei DISPATCH_LEVEL aufgerufen werden, werden sie schneller ausgeführt als KeAcquireSpinLock und KeAcquireInStackQueuedSpinLock.

Weitere Informationen zu Drehsperren finden Sie unter Spin Locks.