7

我知道所有守护线程都是分离线程,但为什么所有分离线程都不是守护线程?

假设线程“main”创建线程“A”(非分离),线程“A”创建线程“B”(分离)。当“B”继续运行时,线程“A”可以退出吗?

PS:我问的是pthreads,但无论如何请回答。

4

2 回答 2

3

也许你应该先阅读fork 和 thread 有什么区别?

详细说明

守护线程

通常在 C/C++(Linux 环境)中,人们会使用fork()创建一个守护进程。fork()通过复制调用进程来创建一个新进程。在这里,父进程将退出,而将子进程留在后面。该子进程与控制终端分离,重新打开所有 {stdin, stdout, stderr} 到 /dev/null,并将工作目录更改为根目录。(当然,基于标志)。在 Linux 下,fork() 是使用写时复制页实现的,因此它所招致的唯一损失是复制父页表所需的时间和内存,并为子页创建独特的任务结构。

分离线程

而Pthread的分离行为则不同(1)被分离的线程一旦分离就不能再join回来(2)分离属性仅仅决定了线程终止时系统的行为;如果进程使用 exit 终止(或者等效地,如果主线程返回),它不会阻止线程终止。pthread_detach()函数将线程标识的线程标记为已分离。当一个分离的线程终止时,它的资源会自动释放回系统,而不需要另一个线程加入到终止的线程中。

于 2013-02-05T16:05:49.443 回答
1

我认为就内存模型而言,线程 A 可以退出而线程 B 可以继续运行。此外,如果没有用户线程正在执行,程序将退出......或者您可以认为只保留守护线程,因此应用程序将以不同的方式结束

于 2012-08-10T15:43:04.883 回答