0

我用 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 上失败。

4

1 回答 1

0

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

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

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

  3. 在这两种情况下,$_->join foreach @threads;都是要走的路。

  4. 如果不需要等待线程完成,请使用 detach 命令而不是 join。但是,线程可能返回的任何结果都将被丢弃。

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

于 2013-04-23T08:51:36.433 回答