千万别在自己的进程中挂起线程!

2025-04-15
千万别在自己的进程中挂起线程!

一个客户遇到了一个长期存在的低频挂起问题:UI线程调用内核后卡住。内核转储无法显示用户模式堆栈,因为堆栈已被换出。调查发现,一个看门狗线程会周期性地挂起UI线程以获取堆栈跟踪,但这次却卡住了5个多小时。原因是:看门狗线程在获取UI线程堆栈跟踪时,需要获取函数表锁,而UI线程正处于挂起状态,持有该锁。这导致了死锁。文章强调了不要在自己的进程中挂起线程,因为它可能导致因被挂起线程持有资源而造成死锁。如果需要挂起线程并获取堆栈跟踪,应该从另一个进程进行操作,避免死锁。

开发 线程挂起