在iOS上调试时,如果我暂停执行,我经常会看到多个对“__workq_kernreturn”的引用。
如果我的应用程序碰巧崩溃,我经常看到多个线程被识别如下:
Thread 19:
0 libsystem_kernel.dylib 0x332d0cd4 __workq_kernreturn + 8
Thread 20:
0 libsystem_kernel.dylib 0x332d0cd4 __workq_kernreturn + 8
Thread 21:
0 libsystem_kernel.dylib 0x332d0cd4 __workq_kernreturn + 8
“__ workq_kernreturn”是否表示正在等待退出的线程或死锁的线程?这有什么值得担心的吗?
答案 0 :(得分:9)
除非有很多,否则无需担心。如果有很多,这表明你可能会产生比你应该更多的线程,但workq_kernreturn
本身仍然不是问题。它通常意味着线程正在完成。如果您想了解它的作用,可以在opensource.apple.com获取它的来源。
您可能正在关注的最常见的堆栈是:
_workq_kernreturn
_pthread_wqthread
start_wqthread
由于优化,你在那里看不到对_pthread_workq_return()的调用,但这就是实际发生的事情。 _workq_kernreturn
正在等待自旋锁完成,因此它可以在其队列(或退出)上运行下一个东西。