gpt4 book ai didi

c++ - main : return 0 hangs, exit 0 关闭。如何调试?

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:19 25 4
gpt4 key购买 nike

我有一个程序生成三个线程,在它们之间进行一些通信,然后关闭它们。主线程等待最后一个线程关闭,然后调用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. 调用它实际上并没有“杀死”线程。它的作用取决于第二个参数。使用 0,它只会检查它们是否正在运行。请在此处查看手册页:http://man7.org/linux/man-pages/man3/pthread_kill.3.html

关于c++ - main : return 0 hangs, exit 0 关闭。如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28774838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com