megaadam Ответов: 1

Время жизни Pthread в linux


Мои собственные тесты, а также многочисленные веб-источники показывают, что все отделенные дочерние потоки умирают, когда основной поток выходит или убивается (если только он не выходит с pthread_exit).
c-выход основного потока, выходит ли и другой? - переполнение стека[^]

Мой вопрос таков, всегда ли это было определенным поведением? или это могло быть по-другому в старых (10+ лет) встроенных версиях Linux?

Спасибо

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


Что я уже пробовал:

Я не нашел ничего (исторически) отличного в поведении.

1 Ответов

Рейтинг:
5

Jochen Arndt

Интересный вопрос. У меня нет окончательного ответа, но есть некоторая, надеюсь, полезная информация.

Фактическое поведение определяется стандартом POSIX (и так было всегда).

Но ядро Linux использует внутри себя другую модель потока. Поэтому его пришлось изменить, чтобы обеспечить полную совместимость с pthread. См. этот PDF-файл с 2002 года: Потоки POSIX и ядро Linux[^].

Изменения были реализованы в ядре версии 2.6 (см. Родная библиотека потоков POSIX - Википедия[^]).

Так что старые ядра используются LinuxThreads - Википедия[^], которые не совместимы с POSIX и могут вести себя по-разному в отношении дочерних потоков (которые не существовали в модели LinuxThreads, использующей так называемые "задачи").


megaadam

Ух ты, как быстро. Спасибо! Я подожду день, прежде чем соглашусь, чтобы посмотреть, есть ли у более умных людей идеи, которыми можно поделиться. :)

Jochen Arndt

Вы можете принять несколько решений и оценить ответы :)

Но я понимаю, что принятые вопросы могут не получить дальнейших ответов.

Совет, который я забыл в своем ответе:
Проверьте версию ядра, которая использовалась со старым кодом (если это возможно).
Если это было старое ядро, то pthreads не использовался, и поведение определяется используемой реализацией потока.

Просто признал, что кто-то 1-голосовал за ваш вопрос.
Я буду противостоять этому. Я не вижу никаких причин для того, чтобы голосовать против.

megaadam

Спасибо, даже если это не было окончательным, это давало некоторое представление.
Голос "против", вероятно, исходил от кого-то с "stackoverflowish mindset".

Albert Holguin

Да, на самом деле это довольно хороший вопрос. Я тоже буду голосовать за него (как и за ваш ответ).