
26.10.2009, 14:56
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами:
10021597
Репутация:
905
|
|
%res = (); - это пустой хэш )
Ретурны я убрал, т.к. хэш расшаренный и возвращать как бы ничего не надо. А вот пример без использования шарного хэша и с ретурнами
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, ' => ', $a->{$_}, "\n" for sort {$a <=> $b} keys %$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
%res = ();
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
#$res[$_] = $trl[$_]->join;
%res = (%res, %{$trl[$_]->join});
#print $n, "\n";
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
#print $ii . "\n";
}
#print $ii, "\n";
return \%hash
}
return \%res;
}
|
|
|