LINUX.ORG.RU

pthread_create + fork


0

1

столкнулся тут что при создании потока pthread_create и последующего fork и умирания родителя - умирает и поток. как-то можно изменить это поведение?

★★★★

А что хочется получить-то? Дополнительный тред живёт в родительском процессе, дочерние процессы ему как-то по боку. Он помрёт вместе с родителем независимо от того, был форк или не было.

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

хочется понять есть возможность его унаследовать в потомке fork() или нет, видимо нет

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

AFAIK после fork()-а дочерний процесс получает всегда только тот поток, который дернул fork() - в спецификациях POSIX-а оговорено такое поведение.

Очевидно что все вышесказанное относится только к pthread_create и другим библиотекам, делающим 1:1 на системные потоки. Те поточные библиотеки, которые делают маппинг N:1 (все потоки крутятся в одном реальном «системном» потоке, и шедулинг делается целиком ручками в userspace-е между потоками) - к ним это не относится, и они все будут унаследованы после fork-а. (Пример такой реализации - встроенные потоки в erlang-е, и вроде бы pthread можно так скомпилировать, отломав ему возможность родными системными потоками пользоваться).

hydraulicbrakefluid
()

изменить нельзя, но можно через pthread_atfork() аккурано сохранить состояния (например захваченные этим потоком мьютексы) в родителе и создать поток в ребенке заново.

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