这两个代码是不同的吗?

时间:2016-11-25 10:28:14

标签: multithreading perl variables stack

"[...]index.php?state=information&pageinfo=2"

foreach $thr (1..5)  
  {                               
     $threads[$thr]=threads->create("worker");        
  }    

后者运作良好,前者发出警告。

foreach (1..5)  
  {                               
     push @threads,threads->create("worker");        
  }  

这是整个代码。并且警告无法在threadqueue2(1).plx.line42上的未定义值上调用方法“is_running”。 Perl退出活动线程。

1 个答案:

答案 0 :(得分:3)

没有。您最终会得到不同的数据结构。正如您从代码的简化版本中可以看到的那样。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Data::Dumper;

my @threads;

foreach my $thr (1 .. 5) {
  $threads[$thr] = 'A Thread';
}

say Dumper \@threads;

@threads = ();

foreach (1 .. 5) {
  push @threads, 'A Thread';
}

say Dumper \@threads;

输出结果为:

$VAR1 = [
          undef,
          'A Thread',
          'A Thread',
          'A Thread',
          'A Thread',
          'A Thread'
        ];

$VAR1 = [
          'A Thread',
          'A Thread',
          'A Thread',
          'A Thread',
          'A Thread'
        ];

在第一个示例中,您开始在元素1处填充数组,因此第一个元素(索引为0)包含undef