| Предыдущий | Следующий |
| STATUS_INVALID_PAGE_PROTECTION | STATUS_SEMAPHORE_LIMIT_EXCEEDED |
STATUS_MUTANT_NOT_OWNED
Освободить этот мутант может только владеющий поток
Мутанты ядра и мьютексы Win32 являются объектами синхронизации с владельцем. Владение назначается потоку, успешно захватившему объект, а освобождение связано с этим владельцем. Этот статус означает, что путь освобождения выполнялся в другом потоке или после того, как владение уже было снято.
Сохраните идентификаторы потока захвата и потока освобождения, а также глубину рекурсии. Передача работы между потоками пула часто указывает на архитектурную ошибку: код, захватывающий мьютекс в одной callback-функции и ставящий освобождение в очередь другой callback-функции, нарушает модель владения, даже если защищаемые данные являются глобальными. Замена мьютекса семафором только ради межпоточного освобождения меняет семантику синхронизации и должна быть осознанным архитектурным решением.
Что проверить
- Отследите каждое успешное ожидание, захватывающее мутант, и каждое освобождение.
- Сравните идентификатор потока-владельца и счётчик рекурсии в момент ошибки.
- Выполняйте захват и освобождение в одном логическом потоке либо выберите примитив синхронизации без владельца.
Ссылки
- Microsoft: объекты-мьютексы
- ReactOS: реализация исполнительного mutant
- Открытые спецификации Microsoft: значения NTSTATUS
Нужно найти другой код? Найти другой код состояния или ошибки.