我是Perl的新手,我正在编写一个需要使用线程的程序。我在Perl中找到了threads feature,但我发现我仍然有点困惑。正如本文标题中所述,Java可能是使用线程最常见的。我并不是说这是完美的,但我可以使用Thread课程完成工作。
在Java中,我有一个名为startThreads的方法,在该方法中我创建了线程然后启动它们。启动它们之后有一个while循环,检查踏板是否完成。如果所有线程都已正确退出,则while循环退出,但如果没有,则while循环正在观察哪些线程超时,然后安全地中断这些线程并将其关闭标志设置为true。
问题: 在Perl中我想使用我上面提到的相同算法,但当然Perl有所不同,我是Perl的新手。在其他线程运行时是否可以运行while循环?怎么做?
答案 0 :(得分:2)
您可以使用while
在Perl中实现threads->list()
循环,但首先应该考虑不同的方法。
而不是等待线程,等待结果怎么样?
这里的基本思想是你有一些代码从队列中获取工作单元,并将工作单元的结果(对象或异常)放入输出队列。
启动几个等待输入队列中的工作单元的线程。当一个出现时,运行工作单元并将结果放入输出队列。
在主代码中,您只需要将所有N个工作单元放入输入队列(确保它足够大)。之后,您可以在输出队列中等待N个输出,而无需担心线程,连接和异常。
[编辑] 您的所有问题都应在http://perldoc.perl.org/perlthrtut.html
中得到解答答案 1 :(得分:1)
在perl中使用线程时要小心。安全访问共享数据有很多细微差别。因为大多数Perl代码都没有进行线程处理,所以很少有模块是线程安全的。
答案 2 :(得分:0)
在阅读了Michael Slade提供的链接后,我发现Cyber-Guard Enterprise是正确的。通过分离线程,主要仍在执行工作。我还没有测试过,但看起来$ thr-> is_running()可以告诉我线程是否仍在运行。
这是从提供的网址中获取的,并显示了如何使用分离。 perldoc.perl.org/perlthrtut.html?
use threads;
my $thr = threads->create(\&sub1); # Spawn the thread
$thr->detach(); # Now we officially don't care any more
sleep(15); # Let thread run for awhile
sub sub1 {
$a = 0;
while (1) {
$a++;
print("\$a is $a\n");
sleep(1);
}
}