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

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


知道为什么吗?

当其他线程已经创建并正在运行时,这种行为是正常的,但是我想知道在使用pthread_exit(0)之前是否始终必须检查一下。

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

最佳答案

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

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

关于c - 为什么pthread_exit(0)挂起程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37320397/

10-15 20:15