1

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

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

没有任何东西可以打印到控制台上。我预计 while(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;
   }
}

你能发现这里的缺陷吗!

4

2 回答 2

4

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

$_->join for threads->list;
于 2013-10-16T17:59:14.620 回答
2

$| = 1;

获得无缓冲的输出,并确保您的主线程在其他线程正在执行时执行某些操作,即。

sleep 1 while 1;

或按照@ikegami 的建议等待线程

$_->join for $t1, $t2;
于 2013-10-16T17:56:13.893 回答