是.在现代linux(更重要的是GNU libc的较新版本)中,exit_group是主要返回时使用的系统调用,而不是纯粹的退出. exit_group描述如下:
This system 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
system without the need for another
thread to join with the terminated
thread.
所以一个快速而肮脏的答案是:“当你不关心什么时候结束,分开它,如果另一个线程关心它什么时候结束,必须等待它终止,那么不要.