LINUX.ORG.RU

Треды и Форки (+)


0

0

Сижу тут счас проект один пишу
и там в ходе реализации подумалось что местами
надо применять треды, с которыми особо не сталкивался
В общем, делаю я например этак 10 тредов
которые занимаються своими делами
потом форкаюсь, что с тредами этими будет ?
короткие эксперименты на коде показали
что вроде как треды при форке не наследуються
однако хочется услышать мнение людей опытных
может там надо какие-то ресурсы задействованые при создании
тредов освобождать или еще что ?
и есть ли какие-то различия в этом вопросе
при использовании NPTL и LinuxThreads реализаций ?

anonymous
Ответ на: комментарий от jek_

Спасибо прочитал
если я верно понял
то при форке в основной нити остальные в новый процесс
не переносятся, а если же форк будет сделан
в каком то треде то новый процес будет создан
из контекста этого треда.
Я прав ?
И еще тогда такой вопрос по ходу тогда
если форк делается в треде то если по ходу выполнения
этого треда в новом процессе он завершит свою работу
то процес станет зомби и надо будет в родителе вызывать
waitpid
или всеже подругому, в часности в реализации LinuxThreads
в NTPL вроде все должно быть как я описал....

anonymous
()
Ответ на: комментарий от anonymous

> если форк делается в треде то если по ходу выполнения
> этого треда в новом процессе он завершит свою работу
> то процес станет зомби и надо будет в родителе вызывать
> waitpid

да. на всякий случай, уточнение.

родителем этого процесса является любой из потоков.
еще точнее, его parent'ом является процесс (иногда
называют thread group), которому принадлежит поток,
сделавший fork().

поэтому еще более правильный ответ: нет никакой
разницы сколько было потоков в процессе при вызове
fork().

> в часности в реализации LinuxThreads

LinuxThreads - это _эмуляция_ потоков с помощью
clone(VM, FILES, ...). сделана она была потому,
что в ядре в то время не было соответствующей
поддержки. не пользуйтесь.

idle ★★★★★
()
Ответ на: комментарий от idle

Спасибо
Про LinuxThreads все понимаю
уточняю на тот случай если таки придеться связаться
с этим делом, мало ли будет работать софт что пишу
хочется быть готовым к возможной ситуации :)

anonymous
()
Ответ на: комментарий от anonymous

idle: > не пользуйтесь.

Очень многие старые системы работают на ядрах 2.4, где NPTL и не пахнет.
Так что приходится пользоваться, если хочется ублажить максимальное
число пользователей :)

Насчёт LinuxThreads в этом смысле волноваться всё же особо не стоит.
Там содержатся обёртки waitpid и fork, которые перенаправляют соотв.
вызов в тред-менеджер. Он-то и делает настоящий fork и waitpid.

Поэтому, если не делать попыток в пользовательской программы вызвать
ручками настоящие waitpid/fork из glibc, реальный waitpid будет всегда
из того потока (процесса!) -- менеджера, -- который делал fork.

jek_
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.