我正在使用一个共享库,该库在初始化过程中创建工作人员线程。该应用与UCLIBC链接。当它从main()返回时,它会在__pthread_cond_wait()
中崩溃或从工作线程类似,即共享LIB无法正确停止其清理()代码。崩溃时的主()线程堆栈是:
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
由于我没有共享库的来源,所以我无法修复工作者的清理代码,但是我的问题是:
一旦UCLIBC开始卸下共享libs,为什么线程仍在运行(崩溃)?我认为它正在从上面的_dl_munmap
堆栈条目中卸载它们。有没有办法确保当main()退出时暂停/停止所有线程?
为什么线程仍在运行
因为 you (或您链接的共享库)使它们运行。
有没有办法确保当main()退出时暂停/停止所有线程
是:您需要安排线程终止。如果不访问共享库来源,您将无法真正这样做;您唯一的选择是调用_exit
(不应进行任何清理)而不是exit
(或者不是从main
返回)。