Показать сообщение отдельно

  #4  
Старый 26.10.2009, 14:56
krypt3r
Познавший АНТИЧАТ
Регистрация: 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;
}
 
Ответить с цитированием