main:返回0挂起,退出0关闭。怎么调试?

时间:2015-02-27 21:44:51

标签: c++ multithreading debugging return exit

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

但是由于一些奇怪的原因,我的程序没有关闭但在退出return 0时挂起,但它与exit(0)关闭。我已经检查过线程是否已经关闭,我甚至通过发出pthread_kill(pid, 0)强制它们关闭。我也试过valgrind来寻找泄漏的记忆。

据我所知,exit()唯一没做的就是调用本地作用域非静态对象的析构函数,但是我的main函数中没有一个也没有解释它为什么会挂起。

导致这种行为的原因是什么?我该怎么调试呢?

代码:

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 它需要pthread_t类型,而不是pid。这可以通过boost::thread::native_handle
  2. 访问
  3. 调用它实际上并不“杀死”该线程。它的作用取决于第二个论点。使用0,它只会检查它们是否正在运行。请参阅此处的手册页:http://man7.org/linux/man-pages/man3/pthread_kill.3.html