Perl中的并发子例程

时间:2013-10-16 17:50:19

标签: multithreading perl

我试图让这两个子例程同时运行。当我解雇该程序时,我最终得到:

Perl exited with active threads:
    2 running and unjoined
    0 finished and unjoined
    0 running and detached

没有任何内容可以打印到控制台上。我期望在(1)保持活跃状态​​直到SIGTERM。

use threads;

my $t1 = threads->create( \&sub2 );
my $t2 = threads->create( \&sub1 );

sub sub2 {
   my $dbh = get_connector();
   while (1) {
      print "Worker 2 Running";
      sleep 2;
   }
}

sub sub1 {
   while (1) {
      print "Worker 1 Running";
      sleep 1;
   }
}

你能在这里发现缺陷吗?

2 个答案:

答案 0 :(得分:4)

在退出流程之前,您永远不会等待孩子们结束。添加

$_->join for threads->list;

答案 1 :(得分:2)

设置

$| = 1;

有无缓冲的输出,并确保你的主线程在其他线程正在执行时做某事,即

sleep 1 while 1;

或等待线程为@ikegami建议

$_->join for $t1, $t2;