Рейтинг:
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
Да, на самом деле это довольно хороший вопрос. Я тоже буду голосовать за него (как и за ваш ответ).