分离线程和守护线程有什么区别?

8
我了解所有守护线程都是分离线程,但为什么所有分离线程不一定是守护线程呢?
比如线程“main”创建线程“A”(非分离),线程“A”又创建线程“B”(分离)。线程“A”退出后,“B”是否会继续运行?
注:我是在参考pthread时提出这个问题的,但请无论如何回答。
2个回答

4
也许您应该先阅读fork和thread有什么区别? 更进一步的解释: 守护线程 通常在C/C++(Linux环境)中,使用 fork() 创建一个守护进程。 fork()通过复制调用进程来创建一个新进程。此处父进程会退出,留下子进程。此子进程将从控制终端分离出来,重新打开所有的{stdin,stdout,stderr}文件并将工作目录更改为根目录(基于标志,当然)。在Linux下,fork()使用写时复制页面实现,因此它产生的唯一损失是复制父进程的页表所需的时间和内存,并为子进程创建一个唯一的任务结构。 分离线程 而Pthread分离行为不同(1)分离的线程无法再次加入(2)分离属性仅确定系统在线程终止时的行为; 它不会防止进程使用exit(或者等效地,如果主线程返回),则终止线程。pthread_detach()函数将由线程标识符标识的线程标记为已分离。当分离线程终止时,其资源会自动释放回系统,而不需要另一个线程与终止的线程加入。

1

从内存模型的角度来看,线程A可能会退出,而线程B则可以继续运行。此外,如果没有用户线程在执行,程序将退出...或者你可以认为只有守护线程仍然存在,因此应用程序将以不同的方式结束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接