已排入佇列的微調鎖定

已排入佇列的微調鎖定 是微調鎖定的變體,適用于高度競爭的鎖定。 未排入佇列的執行緒同步鎖定是較佳的選擇,適用于輕爭的鎖定。

驅動程式會提供微調鎖定的儲存體,並使用 KeInitializeSpinLock將其初始化。 驅動程式會使用 KeAcquireInStackQueuedSpinLock 來取得佇列的微調鎖定,以及 KeReleaseInStackQueuedSpinLock 來釋放它。

驅動程式會配置 KLOCK_QUEUE_HANDLE 結構,其會以指標傳遞至 KeAcquireInStackQueuedSpinLock。 驅動程式會在釋放微調鎖定時,以指標將相同的結構傳遞至 KeReleaseInStackQueuedSpinLock

驅動程式在每次取得鎖定時,通常會在堆疊上配置 結構。 驅動程式不應該將結構配置為其裝置內容的一部分,然後從多個執行緒共用相同的結構。

驅動程式不得混用對佇列微調鎖定常式的呼叫,以及相同微調鎖定上的一般 KeXxxSpinLock 常式。

如果驅動程式已經在 IRQL = DISPATCH_LEVEL,它可以改為呼叫 KeAcquireInStackQueuedSpinLockAtDpcLevelKeReleaseInStackQueuedSpinLockFromDpcLevel