Автор Тема: fork ,как запускать подпрограммы с одним алгоритмом но разными входными данными ?  (Прочитано 3200 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Elenka

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 83
  • +0/-0
  • 0
    • Просмотр профиля
    • http://soccercleats.blogs.sapo.pt
форками запускаю...
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 элементов

в чем дело...


спасибо

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
На сколько я помню каждый поток получает копию переменных, и соответственно ничего не получается, я бы сделал так: знаешь номер запускаемого потока, значит можешь расчитать нужные элементы, которые брать скажем вызывать:

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

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28