我对线程有一个奇怪的问题。如果我在没有参数或--help
选项的情况下启动程序,它将立即退出。
该程序在启动时加载一个网络检查器线程。当需要退出或禁用某些在线功能时,它只是终止网络检查器线程。这似乎是正确完成的......直到我打电话给exit()
.
在 gdb 上,我可以看到网络检查器已成功关闭 - 但由于一些模糊的原因,当主程序调用exit()
then时pthread_mutex_lock()
也会被调用。
这是回溯:
(gdb) bt
#0 0x00007ffff711e804 in __lll_lock_wait () from /lib64/libpthread.so.0
#1 0x00007ffff711a0e0 in _L_lock_533 () from /lib64/libpthread.so.0
#2 0x00007ffff7119f79 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3 0x00007ffff7dea3cd in _dl_fini () from /lib64/ld-linux-x86-64.so.2
#4 0x00007ffff6dbe6a1 in __run_exit_handlers () from /lib64/libc.so.6
#5 0x00007ffff6dbe725 in exit () from /lib64/libc.so.6
#6 0x0000000000413ec4 in option_handler (argc=1, argv=0x7fffffffdcb8) at autocrack.c:302
#7 0x00000000004135a7 in main (argc=1, argv=0x7fffffffdcb8) at autocrack.c:34
当我从我的函数内部调用时,这不会发生。这只发生在我从选项处理程序内部调用时。exit()
main
exit()
我曾经grep -rin pthread_mutex_ .
看到在我的程序中还有哪些地方使用了锁:程序永远不应该达到这些点。
完整的源代码可以在https://github.com/tux-mind/autocrack找到
这是怎么回事?