运行以下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/