我正在使用一个共享库,它在初始化期间创建工作线程。该应用程序与uClibc链接。当它从main()返回时,它在__pthread_cond_wait()或类似的工作线程中崩溃,共享库没有正确地停止清除()代码。当主()线程堆栈崩溃时:
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main由于我没有共享库的源代码,所以无法修复工作人员清理代码,但我的问题是:
为什么一旦uClibc开始卸载共享库,线程仍在运行(崩溃)?我猜想它是从上面的_dl_munmap堆栈条目中卸载它们的。是否有办法确保在main()退出时暂停/停止所有线程?
发布于 2016-12-02 07:52:22
为什么线程还在运行?
因为您(或您所链接的共享库)让它们运行。
是否有办法确保当main()退出时暂停/停止所有线程?
是的:您需要安排线程终止。如果没有对共享库源的访问,您就无法真正做到这一点;您唯一的选择是调用_exit (不应该运行任何清理),而不是调用exit (或者从main返回)。
https://stackoverflow.com/questions/40919598
复制相似问题