尽管加入了循环,仍然保持解除绑定的线程

时间:2013-02-03 17:41:04

标签: multithreading perl join

我在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。 有人能帮我吗? THX

1 个答案:

答案 0 :(得分:2)

当没有正在运行的线程时停止循环,但是只有当没有任何类型的 时,你才应该停止循环。换句话说,您不检查是否存在可连接的线程。解决方案:

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

当然,它使用100%的CPU。避免这种情况的简单方法是使用:

$_->join() for threads->list();