2012-06-22 49 views
0

可能重複:
Perl: Threading with shared multi-dimensional hash如何在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實際上需要很長時間才能在大數據集上循環(未顯示循環icity)

我想重寫代碼看起來像這樣。

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 ... 

我要尋找一些幫助,如何正確分享這些?

謝謝

+0

謝謝,我沒有看到那一個。會試一試。 – Smartelf

+0

我同意格雷格培根。同樣的問題,答案適用。請參閱PerlMonks上的[線程:共享標量的無效值](http://www.perlmonks.org/?node_id=259551)。 – ikegami

回答

0

我使用類似這樣的東西。

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

@ThreadInput對我腳本中的所有線程都是可見的。

相關問題