为什么pthread_exit(0)挂起程序?

时间:2016-05-19 10:23:14

标签: c multithreading pthreads pthread-exit

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

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

知道为什么吗?

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

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

1 个答案:

答案 0 :(得分:0)

pthread_exit man page笔记中描述了您的整个用例。 在您的情况下,当您正确编辑OP时,glib启动了另一个线程。您退出主线程,另一个线程继续运行。你把它标记为挂起。 通常,如果您要完整退出应用程序,只需使用exit或从main()返回即可。

只有当你需要额外的魔法(很少)像分离的线程时,在主线程上使用pthread_exit()