Perl线程-共享哈希引用



在下面的代码(较大脚本的一部分)中,$ref_h_report的两个打印每次都会收到不同的结果,尽管脚本"有效",即在两个子中引用相同的哈希。为什么打印结果不同?这会引起什么问题吗?

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=%0dn", $ref_h_report;
.....
}
sub merge {
if($ref_h_report{'test'} eq 'PASSED')
print "reference=%0dn", $ref_h_report;
}
}

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

我认为你可以从Wide Finder项目中获得灵感。Sean O’Rourke的结果中有一个很好的解决方案。当键的数量远远超过并行化带来的好处时,它就不能为您工作了。它也可以被慢速IO杀死。

最新更新