Forum Webscript.Ru

Программирование => Perl => Тема начата: Elenka от 08 Ноября 2005, 10:36:22

Название: fork ,как запускать подпрограммы с одним алгоритмом но разными входными данными ?
Отправлено: Elenka от 08 Ноября 2005, 10:36:22
форками запускаю...
my @old=...

for(1..10)
{
   if(!defined($pid=fork()))
   {
      die;
   }
   elsif(!$pid)
   {
      my @new;
      for(1..10)
      {
         push @new, shift @old;
      }
      my $p=sub(\\@new);
   }
   else
   {
      lastpid=$pid;
      undef $pid;
   }
}

sub sub {

   my @a=@{$_[0]};
   for(@a)
   {
      print $_,"\\n";
   }
}

waitpid($lastpid,0);


Итак , имеем массив @old допустим с 100 значениями...

нужно запустить 10 процессов, отдав каждому кусок (10) от этого массива...тобишь первый получает элементы 0..9, второй 10..19 итд...НО
в данном случае все процессы каждый раз пполучают первые 10 элементов

в чем дело...


спасибо
Название: fork ,как запускать подпрограммы с одним алгоритмом но разными входными данными ?
Отправлено: Ivan Kolesnikov от 08 Ноября 2005, 11:40:41
На сколько я помню каждый поток получает копию переменных, и соответственно ничего не получается, я бы сделал так: знаешь номер запускаемого потока, значит можешь расчитать нужные элементы, которые брать скажем вызывать:

my $p=sub([@old(10*$index..10*$index+9]]);

Где $index - номер потока (0..)
То есть все будут работать с одним массивом, но получать различные его срезы.

Почему не используешь кнопку # (code) для оформления кода моноширным шрифтом, так читать намного проще.