0

我正在使用一个在初始化期间创建工作线程的共享库。该应用程序与 uClibc 链接。当它从 main() 返回时,它__pthread_cond_wait()会在共享库未正确停止其 cleanup() 代码的工作线程中崩溃或类似情况。崩溃时的 main() 线程堆栈是:

#0 _dl_munmap from uClibc.so
#1 _dl_fini 
#2 __GI_exit 
#3 __uClibc_main

由于我没有共享库的源代码,我无法修复工作人员清理代码,但我的问题是:

为什么一旦 uClibc 开始卸载共享库,线程仍在运行(崩溃)?_dl_munmap我假设它正在从上面的堆栈条目中卸载它们。有没有办法确保 main() 退出时所有线程都暂停/停止?

4

1 回答 1

1

为什么线程仍在运行

因为(或您链接的共享库)让它们运行。

有没有办法确保 main() 退出时所有线程都暂停/停止

是的:需要安排线程终止。如果不访问共享库源,您就无法真正做到这一点;您唯一的其他选择是调用_exit(不应该运行任何清理)而不是exit(或而不是从返回main)。

于 2016-12-02T07:52:22.103 回答