我用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上失败。
答案 0 :(得分:0)
虽然没有代码,但我会继续假设你使用join foreach @threads;
来加入线程。现在,线程的加入取决于后期处理。没有看到你的代码就很难知道,你在做什么。但它的工作原理是:
如果后处理步骤需要之前完成所有线程 开始工作,然后等待单个线程是不可避免的。
如果后处理步骤特定于每个的结果 线程,应该可以使后处理部分 线程本身。
在这两种情况下,$_->join foreach @threads;
都是可行的方法。
如果没有必要等待线程完成,请使用 detach命令而不是join。但是,任何结果都是如此 线程可能会被丢弃。
您确定,您为活动提供了有效的后期处理方案吗?