我有一个程序产生三个线程,在它们之间进行一些通信,然后关闭它们。主线程等待最后一个线程关闭,然后调用return 0
。
但是由于一些奇怪的原因,我的程序没有关闭但在退出return 0
时挂起,但它与exit(0)
关闭。我已经检查过线程是否已经关闭,我甚至通过发出pthread_kill(pid, 0)
强制它们关闭。我也试过valgrind来寻找泄漏的记忆。
据我所知,exit()
唯一没做的就是调用本地作用域非静态对象的析构函数,但是我的main函数中没有一个也没有解释它为什么会挂起。
导致这种行为的原因是什么?我该怎么调试呢?
代码:
答案 0 :(得分:0)
您需要在返回之前加入每个线程。
bo_thread.join();
pub_thread.join();
sub_thread.join();
此外,您使用它的方式pthread_kill(pid, 0)
有两个问题。
pthread_t
类型,而不是pid。这可以通过boost::thread::native_handle