Linux C:从main()返回是否导致多线程应用程序终止?

Linux C:从main()返回是否导致多线程应用程序终止?,第1张

概述这个问题似乎可能是重复的,但是我找不到一个.如果我错过了上一个问题,道歉. 在Java中,我有大部分的经验,如果你的main()分叉一个线程,并立即返回进程继续运行,直到进程中的所有(非守护进程)线程都停止. 在C中,似乎并非如此 – 一旦主线程返回进程正在停止,其他线程仍在运行.对于我当前的应用程序,这可以很容易地通过应用程序pthread_join()解决,但我想知道是什么原因导致这种行为.这 这个问题似乎可能是重复的,但是我找不到一个.如果我错过了上一个问题,道歉.

在Java中,我有大部分的经验,如果你的main()分叉一个线程,并立即返回进程继续运行,直到进程中的所有(非守护进程)线程都停止.

在C中,似乎并非如此 – 一旦主线程返回进程正在停止,其他线程仍在运行.对于我当前的应用程序,这可以很容易地通过应用程序pthread_join()解决,但我想知道是什么原因导致这种行为.这个编译器(gcc)是具体的,pthreads具体的还是在大多数/所有C实现的平台上共享的行为?这个行为是否可以在pthreads中配置(我看过pthread_attr _ *()函数中的pthread API,没有看到任何看起来相关的内容).

完全独立的问题,但是当你在这里…什么会用pthread_detatch()?

解决方法 是.在现代linux(更重要的是GNU libc的较新版本)中,exit_group是主要返回时使用的系统调用,而不是纯粹的退出. exit_group描述如下:

This sy@R_502_6563@ call is equivalent to
exit(2) except that it terminates not
only the calling thread,but all
threads in the calling process’s
thread group.

值得注意的是,目前的c标准没有提到线程,所以这个行为不是c具体的,而是特定于你的特定实现.也就是说,当我的主线程终止时,我亲身看到的每个实现都会杀死所有线程.

编辑:值得注意的是,Jonathan Leffler的答案指出,POSIX标准确实指定了这种行为,所以使用pthreads进行线程的应用程序当然是正常的.

编辑:回答关于pthread_detach的跟进.基本上,如果您不加入非脱机线程,则被视为资源泄漏.如果你有一个长时间运行的任务,你不需要“等待”,它只是“结束,当它结束”,那么你应该分离它不会有资源泄漏,当终止没有加入.该手册页面显示以下内容:

The pthread_detach() function marks
the thread IDentifIEd by thread as
detached. When a detached thread
terminates,its resources are
automatically released back to the
sy@R_502_6563@ without the need for another
thread to join with the terminated
thread.

所以一个快速而肮脏的答案是:“当你不关心什么时候结束,分开它,如果另一个线程关心它什么时候结束,必须等待它终止,那么不要.

总结

以上是内存溢出为你收集整理的Linux C:从main()返回是否导致多线程应用程序终止?全部内容,希望文章能够帮你解决Linux C:从main()返回是否导致多线程应用程序终止?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存