Прерывание ядра не гарантирует отсутствие тупика.
Поток может по-прежнему удерживать блокировку, даже не снимая ее, и это все равно приведет к тупику, если какой-то другой поток захочет получить такую же блокировку.Поток, удерживающий блокировку, должен решить освободить ее, чтобы избежать взаимоблокировок.То есть поток или какая-то другая логика должна выгрузить поток и , чтобы он снял блокировку.Само ядро не может заставить поток снять блокировку.
Ядро просто может запланировать запуск других потоков, но если какой-то другой поток зависит от завершения первого потока, этот поток также будет заблокирован.
Например:
Поток A ожидает блокировки для некоторого общего ресурса, который получил поток B.
Поток A получает приоритет, и поток B. становится запланированным.*
Поток B ожидает блокировки для некоторого общего ресурса, который удерживает поток A.
Тупик.Ни поток A, ни поток B не могут прогрессировать.
Чтобы выйти из тупика, нужно что-то вытеснить из потока A или B, чтобы снять блокировку.Прерывание ядра не может этого сделать.