Perl在线程之间共享变量编译错误

时间:2014-06-30 09:29:58

标签: 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);
    $_->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行是我增加变量的行。

我搜索过,但找不到有同样错误的人。

1 个答案:

答案 0 :(得分:1)

仅仅因为你使用线程并不意味着Perl的其他规则被抛弃了。

您在my $shared_var中定义Handler,但尝试在PrintGreeting中使用它。这不会对正常变量起作用,也不会在线程之间共享。基本变量范围。

也许您打算对包级(全局)变量进行十分转换?