Hasty Briefsbeta

双语

The case of the UI thread that hung in a kernel call

a year ago
  • #debugging
  • #thread-suspension
  • #deadlock
  • 客户报告了一个UI线程挂起问题,由于堆栈被换出而无法诊断
  • 该线程被挂起超过五小时,但未附加调试器来解释挂起原因
  • 发现同一进程内的看门狗线程会挂起UI线程以捕获堆栈跟踪,从而导致死锁
  • 死锁发生的原因是UI线程持有看门狗线程捕获堆栈跟踪所需的锁
  • 挂起同一进程内的线程存在死锁风险,如果被挂线程持有其他线程所需的资源
  • 解决方案是使用外部进程实现看门狗功能以避免死锁
  • 内核会延迟线程挂起以避免中断关键操作,但这不能防止用户模式的死锁
  • 微软关于线程挂起和加载器锁的设计选择受到批评,但根本问题在于进程内看门狗机制