已排入佇列的微調鎖定
已排入佇列的微調鎖定 是微調鎖定的變體,適用于高度競爭的鎖定。 未排入佇列的執行緒同步鎖定是較佳的選擇,適用于輕爭的鎖定。
驅動程式會提供微調鎖定的儲存體,並使用 KeInitializeSpinLock將其初始化。 驅動程式會使用 KeAcquireInStackQueuedSpinLock 來取得佇列的微調鎖定,以及 KeReleaseInStackQueuedSpinLock 來釋放它。
驅動程式會配置 KLOCK_QUEUE_HANDLE 結構,其會以指標傳遞至 KeAcquireInStackQueuedSpinLock。 驅動程式會在釋放微調鎖定時,以指標將相同的結構傳遞至 KeReleaseInStackQueuedSpinLock 。
驅動程式在每次取得鎖定時,通常會在堆疊上配置 結構。 驅動程式不應該將結構配置為其裝置內容的一部分,然後從多個執行緒共用相同的結構。
驅動程式不得混用對佇列微調鎖定常式的呼叫,以及相同微調鎖定上的一般 KeXxxSpinLock 常式。
如果驅動程式已經在 IRQL = DISPATCH_LEVEL,它可以改為呼叫 KeAcquireInStackQueuedSpinLockAtDpcLevel 和 KeReleaseInStackQueuedSpinLockFromDpcLevel 。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應