我正在使用Thread::Pool::Simple
进行多线程处理。
我想有几个问题对于多线程非常普遍,我想:
如果出现意外情况,我的每个线程都可能会死亡。这完全被我接受,因为这意味着我的一些断言是错误的,我需要重新设计代码。目前,当任何线程死亡时,主程序(调用线程)也会死亡,产生类似的东西:
Perl exited with active threads:
0 running and unjoined
0 finished and unjoined
4 running and detached
答案 0 :(得分:0)
当主程序退出时,所有线程都会被终止。
Perl线程以两种方式之一工作。
1)您可以使用join
:
my $thr = threads->create(...);
# do something else while thread works
my $return = $thr->join(); # wait for thread to terminate and fetch return value
2)您可以使用detach
:
my $thr = threads->create(...);
$thr->detatch(); # thread will discard return value and auto-cleanup when done
该消息列出了在程序终止之前尚未清除的线程。 “正在运行和未连接”是案例1,仍在运行。 “已完成和未加入”是案例1,已完成但尚未获取返回值。 “运行和分离”是案例2,仍在运行。
所以它说有4个线程已被分离但在程序死亡之前尚未完成。如果程序运行时间更长,或者它们陷入无限循环,或者陷入僵局,或是什么,你无法判断它们是否会完成。
对于您描述的情况,您不需要任何锁定。