【问题标题】:Why does pthread_exit(0) hangs the program?为什么 pthread_exit(0) 会挂起程序?
【发布时间】:2016-05-19 10:23:13
【问题描述】:

运行以下 C 代码会导致程序挂起,并且不响应信号(包括 CTRL-C)。

int main()
{
    pthread_exit(0);
    return 0;
}

知道为什么吗?

当其他线程已创建并正在运行时,该行为是正常的,但我想知道在使用 pthread_exit(0) 之前是否总是需要检查。

编辑: 这是挂起的完整代码。但是,我是用 glib (-lglib-2.0) 构建的。只需使用 cc -o foo foo.c 即可按预期工作。

【问题讨论】:

  • 挂起?你终止了它!您的进程只有一个线程 - 由加载程序创建的线程,您终止了它:(
  • 这是完整代码(挂起)吗?那你说的其他线程是什么?
  • 无法在此处复制,无论有无-lglib-2.0

标签: c multithreading pthreads pthread-exit


【解决方案1】:

您的整个用例在pthread_exit man page注释 中进行了描述。 在您的情况下,当您正确编辑您的 OP 时,glib 开始了另一个线程。您退出了主线程,而另一个线程继续运行。您将此标记为挂起。 一般来说,如果你想完全退出应用程序,只需使用exit或从main()返回即可。

仅当您需要额外的魔法(很少)如分离线程时,才在主线程上使用pthread_exit()

【讨论】:

  • 我认为手册页没有说明与 OP 描述的行为相关的任何内容。我无法用 glib 重现该行为。为什么 glib 会启动另一个线程?
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 2012-02-17
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多