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 回答