Да.В современном linux (что более важно в более новых версиях GNU libc) exit_group
- это системный вызов, используемый при возврате main, а не в виде exit
.exit_group
описывается следующим образом:
Этот системный вызов эквивалентен exit (2) за исключением того, что он завершает не только вызывающий поток, но и все потоки в группе потоков вызывающего процесса.
Стоит отметить, что в текущем стандарте c ++ не упоминается о потоках , поэтому это поведение не специфично для c ++, а специфично для вашей конкретной реализации.Тем не менее, каждая реализация, которую я лично видел, убивает все потоки, когда основной поток завершается.
РЕДАКТИРОВАТЬ: Стоит также отметить ответ Джонатана Леффлера, который указывает, что стандарт POSIX действительно делаетзадайте это поведение, так что это, конечно, нормально для приложения, использующего pthreads для своей многопоточности.
РЕДАКТИРОВАТЬ: Чтобы ответить на продолжение о pthread_detach
.По сути, это считается утечкой ресурсов, если вы не присоединяетесь к неотсоединенному потоку.Если у вас есть долгосрочное задание, которое вам не нужно «ждать», и оно просто «заканчивается, когда заканчивается», вы должны отсоединить его, что не приведет к утечке ресурсов, когда оно завершится без соединения.Страница man говорит следующее:
Функция pthread_detach () помечает поток, идентифицированный потоком, как отсоединенный.Когда отключенный поток завершается, его ресурсы автоматически возвращаются обратно в систему без необходимости присоединения другого потока к завершенному потоку.
Итак, быстрый и грязный ответ: «когда вы не делаете»не волнуйтесь, когда он заканчивается, отсоедините его. Если другой поток заботится о том, когда он заканчивается и должен ждать его завершения, то не надо. "