我正在尝试获取两个大文件的文本。为了加快速度,我尝试了线程。在我使用线程之前,脚本工作,现在它没有。
问题是:我将在文件中读取的所有内容都保存到哈希中。当我在子程序(线程执行)中读入后打印出大小(或键/值)时,它显示正确的数字> 0,当我在其他任何地方打印出散列的大小时(在线程有运行)它显示我为 0。
print ": ".keys(%c);
使用2次,每次输出不同。(在最终的程序中,有 2 个线程正在运行,并且在线程完成后调用了一个比较东西的方法)
示例代码:
my %c;
my @threads = initThreads();
@threads[0] = threads->create(\&ce);
foreach(@threads){
$_->join();
}
print ": ".keys(%c);
sub initThreads{
my @initThreads;
for(my $i = 0; $i<2;$i++){
push(@initThreads, $i);
}
return @initThreads;
}
sub ce(){
my $id = threads->tid();
open my $file, "<", @arg1[1] or die $!;
my @cXY;
my @cDa;
while(my $line = <$file>){
# some regex and push to arrays, works
@c{@cXY} = @cDa;
}
print "Thread $id is done\n";
close $file;
print ": ".keys(%c);
threads->exit();
}
我是否必须在前两个线程完成后在另一个线程中运行这些东西,等待前两个线程完成?或者我在线程上做错了什么?
谢谢。