为什么我的线程不能加入perl?

时间:2013-04-23 08:03:53

标签: multithreading perl

我用Perl编写了一个非常简短的脚本,我在其中使用了multi-thread

我的问题是,我创建的主题不是joinable。所以我想知道,使线程可以连接的条件是什么?

Perl中线程的限制是什么?

#!/usr/bin/env perl
#
#
use lib "$::XCATROOT/lib/perl";
use strict;
use threads;
use Safe;

sub test
{
    my $parm = shift; 
}
my $newchassis = ["1", "2", "3"];
my @snmp_threads ;

for my $item (@$newchassis)
{
    my $thread =  threads->create(\&test, $item);
    push @snmp_threads, $thread;
}

for my $t (@snmp_threads)
{
    $t->join();
}

这可能非常棘手,因为它可以在RHEL 6.3上找到,但在SLES 11sp2上失败。

1 个答案:

答案 0 :(得分:0)

虽然没有代码,但我会继续假设你使用join foreach @threads;来加入线程。现在,线程的加入取决于后期处理。没有看到你的代码就很难知道,你在做什么。但它的工作原理是:

  1. 如果后处理步骤需要之前完成所有线程 开始工作,然后等待单个线程是不可避免的。

  2. 如果后处理步骤特定于每个的结果 线程,应该可以使后处理部分 线程本身。

  3. 在这两种情况下,$_->join foreach @threads;都是可行的方法。

  4. 如果没有必要等待线程完成,请使用 detach命令而不是join。但是,任何结果都是如此 线程可能会被丢弃。

  5. 您确定,您为活动提供了有效的后期处理方案吗?