我有一段代码看起来像这样(过于简化):
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 ...
我正在寻找一些关于如何正确分享这些内容的帮助?
由于
答案 0 :(得分:0)
我使用这样的东西。
#!/usr/bin/perl -w
use threads;
use threads::shared;
my @ThreadInput :shared=();
@ThreadInput对我脚本中提供的所有线程都是可见的。