main: return 0 挂起,exit 0 关闭。如何调试?

main: return 0 hangs, exit 0 closes. How to debug?

我有一个程序生成三个线程,在它们之间进行一些通信,然后关闭它们。主线程等待最后一个线程关闭,然后调用return 0

但由于某些奇怪的原因,我的程序没有关闭,而是在使用 return 0 退出时挂起,但是它使用 exit(0) 正常关闭。我已经检查过线程是否真的关闭了,我什至通过发出 pthread_kill(pid, 0) 强制它们关闭。我也试过 valgrind 来寻找泄漏的内存。

据我所知,exit() 唯一没有做的就是调用局部作用域的非静态对象的析构函数,但我的主函数中没有析构函数,也无法解释它挂起的原因。

是什么导致了这种行为?我该如何调试它?

代码:

您需要在返回之前加入您的每个线程。

bo_thread.join();
pub_thread.join();
sub_thread.join();

此外,pthread_kill(pid, 0)您使用它的方式有两个问题。

  1. 它需要一个 pthread_t 类型,而不是 pid。这可以通过 boost::thread::native_handle
  2. 访问
  3. 调用它实际上 'kill' 线程。它的作用取决于第二个参数。对于 0,它只会检查它们是否为 运行。请在此处查看手册页:http://man7.org/linux/man-pages/man3/pthread_kill.3.html