【发布时间】:2014-04-29 22:57:22
【问题描述】:
每当线程在 perl 中完成时,我都会尝试计数,并打印计数。但这不起作用。我不断得到“0”或“1”,我试图添加到计数中,然后在发出获取请求后立即打印计数。
use strict;
use threads;
use LWP::UserAgent;
our $MAX //= $ARGV[1];
my $list = $ARGV[0];
open my $handle, '<', $list;
chomp(my @array = <$handle>);
close $handle;
my $lines = `cat $list | wc -l`;
my $count = 0;
my @threads;
foreach $_ (@array) {
push @threads, async{
my @chars = ("a".."z");
my $random = join '', map { @chars[rand @chars] } 1 .. 6;
my $ua = LWP::UserAgent->new;
my $url = $_ . '?session=' . $random;
my $response = $ua->get($url);
count++;
print $count;
};
sleep 1 while threads->list( threads::running ) > $MAX;
}
$_->join for @threads;
【问题讨论】:
-
$count 不是
shared,所以每个线程都会创建自己的副本。 -
那么我该如何解决这个问题,我对此还是很陌生。
-
这应该会有所帮助:perldoc.perl.org/threads/shared.html
标签: multithreading perl count