LINUX.ORG.RU

fork и threads


0

0
здраствуйте.

в программе имеется три треда, в одном из них происходит форк,

в результате будет копия процесса вместе с тредами или как?

anonymous
в результате будет копия треда вызвавшего fork()

копия всего процесса может быть сделана например forkall() OR fork1() в зависимости от платформы

cvv ★★★★★
()
Ответ на: комментарий от cvv
> в результате будет копия треда вызвавшего fork()

то есть в процессе добавиться еще один тред? или как?

anonymous
()
Ответ на: комментарий от anonymous
> то есть в процессе добавиться еще один тред? или как?

Нет. fork() создаст новый (child) процесс, в котором будет
единственный тред - тот, а котором был вызван fork() (точнее тот,
в который fork() вернется со значением 0).

В родительском процессе никаких новых тредов естественно не
добавится.

BTW, в child процессе может произойти deadlock (если конечно он
не делает просто exec() сразу после fork()). Чтобы этого не
случалось, для разруливания такой ситуации имееццо функция
pthread_atfork().
Onanim ★
()
Ответ на: комментарий от cvv
2cvv:

> в результате будет копия треда вызвавшего fork()
> копия всего процесса может быть сделана например forkall() OR
> fork1() в зависимости от платформы

Можно полюбопытствовать - на какой платформе fork1() дублирует
все треды процесса?

Onanim ★
()
Ответ на: комментарий от Onanim
А какже быть с main? Это если я не ошибаюсь оснонвой тред процесса , он копируется? или нет?
anonymous
()
Ответ на: комментарий от Onanim
>Можно полюбопытствовать - на какой платформе fork1() дублирует все треды процесса?

ни на какой. это меня проглючило

cvv ★★★★★
()
Ответ на: комментарий от Onanim
>BTW, в child процессе может произойти deadlock (если конечно он >не делает просто exec() сразу после fork()). Чтобы этого не >случалось, для разруливания такой ситуации имееццо функция >pthread_atfork().

Можно по-подробней, в каком случае получится deadlock?

zhuk ★
()
Ответ на: комментарий от zhuk
> Можно по-подробней, в каком случае получится deadlock?

Deadlock получится, если например в каких-то тредах (отличных от того
треда, из которого делают fork) взяты мьютексы. В child процессе этих
тредов не будет и никто эти мьютексы разблокировать не сможет.
Само по себе это еще не жопа, но попытка взять этот заблокированный
мьютекс другим тредом вызовет блокировку.

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