| Предыдущий | Следующий |
| KERN_LOCK_UNSTABLE | KERN_LOCK_OWNED_SELF |
KERN_LOCK_OWNED
Конкуренция за допустимую блокировку
KERN_LOCK_OWNED означает, что в момент запроса блокировкой владеет другой поток. В отличие от KERN_LOCK_UNSTABLE, сообщённый владелец не исчез; в отличие от KERN_LOCK_OWNED_SELF, вызывающий поток не пытается выполнить конфликтующую операцию со своей блокировкой.
Возвращаемое значение является наблюдением конкуренции, а не доказательством взаимной блокировки. Его значимость зависит от ожидаемой длительности критической секции и от того, предоставляет ли API ожидание, try-lock или явное планирование.
Что проверить
- Определите владеющий поток и выполняемую им работу.
- Измерьте обычную длительность критической секции при сопоставимой нагрузке.
- Если контракт позволяет, отложите работу или используйте механизм ожидания API вместо опроса.
- При длительном владении проверьте цикл с другой блокировкой или заблокированной операцией.
Ссылки
- Apple XNU: kern_return.h
- Руководство Apple по программированию ядра: блокировки и синхронизация
- Руководство Apple по программированию ядра: очереди ожидания планировщика
Нужно найти другой код? Найти другой код состояния или ошибки.