| Предыдущий | Следующий |
| 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 удерживаемой блокировки.
Нужно найти другой код? Найти другой код состояния или ошибки.