錯誤檢查0xF:SPIN_LOCK_ALREADY_OWNED

SPIN_LOCK_ALREADY_OWNED錯誤檢查的值為 0x0000000F。 這表示當微調鎖定已經擁有時,已起始微調鎖定的要求。

重要

本文適用于程式設計人員。 如果您是在使用電腦時收到藍色螢幕錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難排解

SPIN_LOCK_ALREADY_OWNED參數

原因

一般而言,此錯誤是由微調鎖定的遞迴要求所造成。 如果已起始微調鎖定的遞迴要求,也可能會發生此情況,例如,執行緒已取得微調鎖定時,該執行緒會呼叫函式,而該函式也會嘗試取得微調鎖定。 在此情況下,不會封鎖取得微調鎖定的第二次嘗試,因為這麼做會導致無法復原的死結。 如果在多個處理器上進行呼叫,則會封鎖一個處理器,直到另一個處理器釋放鎖定為止。

當指派 IRQL 的所有線程和所有微調鎖定時,也可能會發生此錯誤,而不需要明確遞迴。 微調鎖定 IRQL 一律大於或等於 DPC 層級,但這對執行緒而言並不成立。 不過,持有微調鎖定的執行緒必須維護大於或等於微調鎖定的 IRQL。 將執行緒 IRQL 減少到其持有的微調鎖定 IRQL 層級下方,可讓處理器上排程另一個執行緒。 然後,這個新的執行緒可能會嘗試取得相同的微調鎖定。

解決方案

請確定您不以遞迴方式取得鎖定。 而且,對於保留微調鎖定的執行緒,請確定您不會將執行緒 IRQL 減少到其持有之微調鎖定的 IRQL 下方的層級。