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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.