0

重複の可能性:
Perl:共有多次元ハッシュを使用したスレッド化

私は次のようなコードを持っています(過度に単純化されています):

my @arr;
foreach $t (1..8){
     load_arr($t);
}

sub load_arr{
    my ($t) = @_;
    #get some data form somewhere
    #and put it into $a, $b, $c, $d
    $arr[$t]{$a}{$b}{$c} = $d;
}

load_arrは、大きなデータセットをループするため、実際には長い時間がかかります(簡単にするためにループは示していません)。

このようにコードを書き直したいと思います。

my @arr :shared;
my @threads;
foreach $t (1..8){
    push @threads, threads->create(\&load_arr,$t);
}
$->join for @threads;
....

問題は、実行すると次のエラーが発生することです。

Thread 1 terminated abnormally: Invalid value for shared scalar at ...

これらを適切に共有する方法についてのヘルプを探していますか?

ありがとう

4

1 に答える 1

0

こんなものを使っています。

#!/usr/bin/perl -w
use threads;
use threads::shared;
my  @ThreadInput  :shared=();

@ThreadInput は、スクリプトで生成されたすべてのスレッドに表示されます。

于 2012-06-22T19:53:59.257 に答える