Ошибка 0x0000000F: SPIN_LOCK_ALREADY_OWNED

Синий экран смерти 0x0000000F указывает, что запрос на spin-блокировку инициировался, когда данная блокировка уже запущена.

ПРИЧИНА

Как правило, эта ошибка вызвана рекурсивным запросом на spin-блокировку. Например, когда spin-блокировка была получена потоком, и затем тот же самый поток вызывает функцию, которая также пытается получить spin-блокировку. Вторая попытка получить spin-блокировку не блокируется, потому что это привело бы к взаимоблокировке. Если вызовы будут выполнены больше чем на одном процессоре, то один процессор будет блокирован, пока другой процессор не отпустит блокировку.

Эта ошибка может также произойти без явной рекурсии, когда всем потокам и всем spin-блокировкам присваиваются IRQL. IRQL spin-блокировки всегда больше или равен уровню DPC, но это не учитывается для потоков. Однако, IRQL потока, который содержит spin-блокировку, должен поддержать большее или равное значение с IRQL spin-блокировки. При уменьшении IRQL потока ниже уровня IRQL spin-блокировки, которую поток содержит, позволяет другому потоку выполнятся процессором. Этот новый поток может попытаться получить ту же самую spin-блокировку.

Убедитесь, что Вы рекурсивно не получаете блокировку. И, для потоков, которые содержат spin-блокировку, убедитесь, что Вы не уменьшаете IRQL потока к уровню ниже IRQL spin-блокировки, которую он содержит.

РЕШЕНИЕ

Для устранения ошибки воспользуйтесь статьей "11 рекомендаций по устранению синего экрана".

Буду благодарен всем поделившемся ссылкой в соцсетях

Добавить комментарий


Защитный код
Обновить

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Поиск по сайту

Дополнительно