Что означает код BSOD 15 (SPIN_LOCK_ALREADY_OWNED)?

 
Также может означать:
КонстантаТипОС
ERROR_INVALID_DRIVEОшибка WindowsWindows
KERN_INVALID_NAMEКод возврата ядра macOSmacOS
ippStsLSFLowAndHighСтатус Intel IPPЛюбая
ENOTBLKerrnoLinux
ENOTBLKerrnomacOS
ENOTBLKerrnoSolaris
Предыдущий Следующий
NO_USER_MODE_CONTEXT SPIN_LOCK_NOT_OWNED

SPIN_LOCK_ALREADY_OWNED

Проверка ошибок SPIN_LOCK_ALREADY_OWNED имеет значение 0x0000000F. Это означает, что запрос спин-блокировки был инициирован, когда блокировка уже находилась во владении.

Важно

Эта статья предназначена для программистов. Если при работе с компьютером появился синий экран с кодом SPIN_LOCK_ALREADY_OWNED, см. Устранение ошибок синего экрана.

Параметры SPIN_LOCK_ALREADY_OWNED

Нет

Причина

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

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

Устранение

Убедитесь, что блокировка не захватывается рекурсивно. Для потоков, удерживающих спин-блокировку, также убедитесь, что IRQL потока не снижается ниже IRQL удерживаемой блокировки.


Нужно найти другой код? Найти другой код состояния или ошибки.