在下面的代码(较大的脚本的一部分)中,每次为$ ref_h_report的2个打印件接收不同的结果,尽管脚本“工作”,即在两个subs中引用相同的散列。为什么印刷品会产生不同的结果?这会导致任何问题吗?
use threads;
use threads::shared;
my %h_report;
my $ref_h_report = share(%h_report);
$thr=threads->create(\&run_test)
$thr->join();
&merge_report;
sub run_test {
.....
$ref_h_report{'test'} = 'PASSED';
print "reference=%0d\n", $ref_h_report;
.....
}
sub merge {
if($ref_h_report{'test'} eq 'PASSED')
print "reference=%0d\n", $ref_h_report;
}
}
答案 0 :(得分:1)
Perl线程使用魔法实现共享变量。每个线程都有自己的变量共享容器副本,对它的更改将传播到主副本。但容器是分开的。
答案 1 :(得分:0)
我认为你可以从The Wide Finder Project获得灵感。 Sean O'Rourke在solution制作了很好的Results。当密钥数量大于并行化带来的好处时,它可能不适合您。它也可以被缓慢的IO杀死。