В чем разница между отдельным потоком и потоком демона?

Я понимаю, что все потоки демона являются отдельными потоками, но почему все отдельные потоки не являются демоном?

Скажем, поток «основной» создает поток «А» (не отсоединенный), а поток «А» создает поток «В» (отсоединенный). Может ли поток «А» выйти, пока «Б» продолжает работать?

PS: я спрашиваю со ссылкой на pthreads, но, пожалуйста, отвечайте независимо.


person sgowd    schedule 10.08.2012    source источник


Ответы (2)


Возможно, вам следует сначала прочитать В чем разница между вилкой и потоком?

Чтобы уточнить больше

Демоническая нить

Обычно в C/C++ (среда Linux) демон создается с помощью fork(). fork() создает новый процесс, дублируя вызывающий процесс. Здесь родительский процесс завершится, оставив дочерний процесс позади. Этот дочерний процесс отсоединяется от управляющего терминала, повторно открывает все {stdin, stdout, stderr} в /dev/null и изменяет рабочий каталог на корневой. (на основе флагов, конечно). В Linux функция fork() реализована с использованием страниц копирования при записи, поэтому единственное наказание, которое она влечет за собой, — это время и память, необходимые для дублирования таблиц родительских страниц и создания уникальной структуры задач для дочерней.

Отдельная цепочка

В то время как поведение отсоединения Pthread отличается (1) отсоединенный поток не может быть снова присоединен после отсоединения (2) атрибут detached просто определяет поведение системы, когда поток завершается; это не предотвращает завершение потока, если процесс завершается с помощью выхода (или, что то же самое, если основной поток возвращается). Функция pthread_detach() помечает поток, указанный в параметре thread, как отсоединенный. Когда отсоединенный поток завершается, его ресурсы автоматически высвобождаются обратно в систему без необходимости присоединения другого потока к прерванному потоку.

person enthusiasticgeek    schedule 05.02.2013

Я думаю, что с точки зрения модели памяти возможно, что поток A может выйти, в то время как поток B может продолжать работать. Более того, программа завершится, если не будут выполняться пользовательские потоки... или вы можете подумать, что остались только потоки демона, поэтому приложение завершится по-другому.

person cat_minhv0    schedule 10.08.2012