Share via


Fehlerüberprüfung 0xF: SPIN_LOCK_ALREADY_OWNED

Die SPIN_LOCK_ALREADY_OWNED Fehlerüberprüfung hat den Wert 0x0000000F. Dies gibt an, dass eine Anforderung für eine Spinsperre initiiert wurde, als die Spinsperre bereits im Besitz war.

Wichtig

Dieser Artikel richtet sich an Programmierer. Wenn Sie ein Kunde sind, der während der Verwendung Ihres Computers einen Bluescreen-Fehlercode erhalten hat, finden Sie weitere Informationen unter Behandeln von Bluescreenfehlern.

SPIN_LOCK_ALREADY_OWNED Parameter

Keine

Ursache

In der Regel wird dieser Fehler durch eine rekursive Anforderung für eine Drehsperre verursacht. Es kann auch auftreten, wenn eine ähnliche Anforderung wie eine rekursive Anforderung für eine Spinsperre initiiert wurde, z. B. wenn eine Spinsperre von einem Thread abgerufen wurde, und dann derselbe Thread eine Funktion aufruft, die auch versucht, eine Spinsperre abzurufen. Der zweite Versuch, eine Spinsperre zu erhalten, wird in diesem Fall nicht blockiert, da dies zu einem nicht wiederherstellbaren Deadlock führen würde. Wenn die Aufrufe auf mehr als einem Prozessor erfolgen, wird ein Prozessor blockiert, bis der andere Prozessor die Sperre aufgibt.

Dieser Fehler kann auch ohne explizite Rekursion auftreten, wenn allen Threads und allen Spinsperren ein IRQL zugewiesen wird. Drehsperre-IRQLs sind immer größer oder gleich DPC-Ebene, dies gilt jedoch nicht für Threads. Ein Thread, der eine Spin-Sperre enthält, muss jedoch einen IRQL-Wert beibehalten, der größer oder gleich dem der Spinsperre ist. Wenn der Thread-IRQL unter die IRQL-Ebene der Spinsperre, die er hält, verringert wird, kann ein weiterer Thread auf dem Prozessor geplant werden. Dieser neue Thread könnte dann versuchen, dieselbe Spinsperre zu erhalten.

Lösung

Stellen Sie sicher, dass Sie die Sperre nicht rekursiv erwerben. Stellen Sie bei Threads, die eine Spinsperre enthalten, sicher, dass Sie den THREAD-IRQL nicht auf eine Ebene unterhalb des IRQL der Spinsperre reduzieren, die er hält.