2013-04-23 27 views
-1

我用Perl編寫了一個非常短的腳本,我在其中使用multi-thread爲什麼我的線程不能在perl中連接?

我的問題是,我創建的線程不是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 11 SP2,這是非常棘手的。

+2

請顯示代碼。 – choroba 2013-04-23 08:25:34

+0

我們需要看你的代碼,看看發生了什麼.. – 2013-04-23 08:46:16

+0

我不能向你展示代碼,所以我可以知道可連接線程的前提條件嗎? – david30xie 2013-04-23 08:48:17

回答

0

雖然沒有代碼,但我會繼續並假設您正在使用join foreach @threads;來加入線程。現在線程的加入取決於後處理。沒有看到你的代碼,很難知道你在做什麼。但是,它的工作原理是:

  1. 如果後處理步驟需要的所有線程 之前完成開始工作,然後等待各個線程是不可避免的。

  2. 如果後處理步驟針對每個線程 的結果,應該可以使線程本身的後處理部分爲 。

  3. 在這兩種情況下,$_->join foreach @threads;是要走的路。

  4. 如果不需要等待線程完成,請使用 detach命令而不是連接。但是,線程可能返回的任何結果都將被丟棄。

您確定,您爲您的活動提供了有效的後處理方案嗎?

+0

嗨@黑暗騎士,我附加了一些示例代碼。請檢查。 – david30xie 2013-05-03 06:07:59

相關問題