Perl Threads - 共享哈希引用

时间:2013-12-04 11:31:08

标签: multithreading perl hash share

在下面的代码(较大的脚本的一部分)中,每次为$ 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;
}

}

2 个答案:

答案 0 :(得分:1)

Perl线程使用魔法实现共享变量。每个线程都有自己的变量共享容器副本,对它的更改将传播到主副本。但容器是分开的。

答案 1 :(得分:0)

我认为你可以从The Wide Finder Project获得灵感。 Sean O'Rourke在solution制作了很好的Results。当密钥数量大于并行化带来的好处时,它可能不适合您。它也可以被缓慢的IO杀死。