0

スクリプトで複数のスレッドを使用してPerlおり、最後に次のコードでそれらを結合します。

my @running = threads->list(threads::running);  
while ($#running > -1) {
   foreach (@thrs) {
      $_->join() if $_->is_joinable();
   }
   @running = threads->list(threads::running);
}

しかし、50% でエラー メッセージが表示されますPerl exited with active threads。誰かが私を助けることができますか?どうも

4

1 に答える 1

2

実行中のスレッドがなくなったらループを停止しますが、どの種類のスレッドもなくなったときにのみループを停止する必要があります。つまり、結合可能なスレッドがあるかどうかを確認しません。解決:

while (threads->list()) {
   $_->join() for threads->list(threads::joinable);
}

もちろん、それは 100% の CPU を使用します。これを回避する簡単な方法は、次を使用することです。

$_->join() for threads->list();
于 2013-02-03T17:47:39.040 に答える