Perl运行同步例程

时间:2010-06-01 13:09:03

标签: perl

我正在尝试在perl中同时运行两个子例程。这样做的最佳方法是什么?例如:

sub 1{
        print "im running";
     }

sub 2{
        print "o hey im running too";
     }

如何一次执行这两个例程?

2 个答案:

答案 0 :(得分:7)

使用threads

use strict;
use warnings;
use threads;

sub first {

    my $counter = shift;
    print "I'm running\n" while $counter--;
    return;
}

sub second {

    my $counter = shift;
    print "And I'm running too!\n" while $counter--;
    return;
}

my $firstThread = threads->create(\&first,15);   # Prints "I'm running" 15 times
my $secondThread = threads->create(\&second,15); # Prints "And I'm running too!" 
                                                 # ... 15 times also

$_->join() foreach ( $firstThread, $secondThread );  # Cleans up thread upon exit

您应该注意的是打印是如何不规则地交错的。不要试图在执行顺序良好的错误前提下进行任何计算。

Perl线程可以使用:

进行相互通信
  • 共享变量(use threads::shared;
  • 队列(use Thread::Queue;
  • 信号量(use Thread::Semaphore;

有关详细信息和优秀教程,请参阅perlthrtut

答案 1 :(得分:0)

我实际上没有意识到Perl可以做到这一点,但你需要的是多线程支持:

http://search.cpan.org/perldoc?threads

要么是,要么分叉两个进程,但是要隔离子例程的调用会有点困难。