Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь с fork'ами  (Прочитано 6297 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Statos
Новенький

ru
Offline Offline

« : 21-07-2010 07:28 » 

Мне нужно поддерживать н-ое число потоков, при отработке одного потока он убивается, общее кол-во рабочих потоков уменьшается на один и создается новый. Я не понимаю как это сделать в родительском процессе, то есть как сделать общение между потоками
Вот примерно код:
Код:
#!/usr/bin/perl
my $pid;
my $n;
while(1){
if ($n<10){
$n++;
$pid=fork();
child() unless ($pid)
}
}
exit 0;

sub child{
sleep 3;
print "kill $$\n";
#Здесь нужно что-то типо $n-- в родительском
exit 0;
}
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 21-07-2010 15:32 » 

fork() создает не поток, а копию родительского процесса!

Пул процессов или потоков поддерживать не сложно: просто не завершай поток, а дай знать управляющему процессу, что рабочий процесс выполнил задание и ждет следующего. Ожидание можно сделать с любой блокировкой - даже с блокировкой на чтение из трубы. Передавать задания можно через ту же трубу. Кстати, лучше использовать не трубы (pipe), а анонимные unix-сокеты.
« Последнее редактирование: 21-07-2010 15:34 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Statos
Новенький

ru
Offline Offline

« Ответ #2 : 21-07-2010 16:06 » 

Я недавно начал писать на перле, и даже не представляю что такое труба, можешь дать ссылку или что-нибудь из книг посоветовать.
Если не сложно, пример как написать трубу и давать знать управляющему процессу.
Спасибо.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 21-07-2010 16:48 » 

Statos, мой тебе совет: забудь на время про трубы, потоки, процессы и т.п. и займись изучением основ. Иначе просто не о чем будет разговаривать, т.к. на каждый ответ у тебя возникнет десять вопросов.
Рекомендую книгу Perl Programming (Программирование на Perl). Скачать можно тут: https://club.shelek.ru/viewfiles.php?id=19
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Statos
Новенький

ru
Offline Offline

« Ответ #4 : 22-07-2010 04:00 » 

Хорошо, благодарю.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines