Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 элементов
в чем дело...
спасибо
-
На сколько я помню каждый поток получает копию переменных, и соответственно ничего не получается, я бы сделал так: знаешь номер запускаемого потока, значит можешь расчитать нужные элементы, которые брать скажем вызывать:
my $p=sub([@old(10*$index..10*$index+9]]);
Где $index - номер потока (0..)
То есть все будут работать с одним массивом, но получать различные его срезы.
Почему не используешь кнопку # (code) для оформления кода моноширным шрифтом, так читать намного проще.