Multithreading Perl线程间共享变量编译错误
我想我不应该犯这个错误,但既然我已经犯了,我显然错了。 情况非常简单:在N个线程之间共享一个变量,并让它们将其递增一 代码非常简短和直接:Multithreading Perl线程间共享变量编译错误,multithreading,perl,shared-memory,Multithreading,Perl,Shared Memory,我想我不应该犯这个错误,但既然我已经犯了,我显然错了。 情况非常简单:在N个线程之间共享一个变量,并让它们将其递增一 代码非常简短和直接: use threads; use threads::shared; use strict; sub Handler() { my $shared_var : shared = 1000; my @threads; push @threads, thread->new(\&PrintGreeting); $_-
use threads;
use threads::shared;
use strict;
sub Handler()
{
my $shared_var : shared = 1000;
my @threads;
push @threads, thread->new(\&PrintGreeting);
$_->join for @threads;
}
sub PrintGreeting()
{
$shared_var++;
print "hello, world $shared_var \n";
}
Handler();
我得到的错误是:
Global symbol "$shared_var" requires explicit package name at /home/path/tosource/program.pl line 15.
第15行是我增加变量的那一行
我搜索了,但找不到有相同错误的人。仅仅因为您正在使用线程并不意味着其他Perl规则被抛出窗口 您可以在
Handler
中定义my$shared\u var
,但尝试在PrintGreeting
中使用它。这对于普通变量不起作用,对于线程之间共享的变量也不起作用。基本变量范围
也许您的意思是将其转换为包级别(全局)变量?我明白了。那么我会把它们转移到全球范围。