追踪调查 看Perl线程如何消亡

开发 架构
你对Perl线程的消亡的概念是否熟悉,大多数情况下,你希望你创建的Perl线程正常退出,这就意味着Perl线程所对应的函数体在执行完毕后返回并释放资源。

本文和大家重点讨论一下Perl线程的消亡的概念,如果想让Perl线程正常退出,这就意味着Perl线程所对应的函数体在执行完毕后返回并释放资源。

Perl线程的消亡

大多数情况下,你希望你创建的Perl线程正常退出,这就意味着Perl线程所对应的函数体在执行完毕后返回并释放资源。例如在清单5的示例中,新建Perl线程被join以后的退出过程。可是,如果由于detach不当或者由于主线因某些意外的异常提前结束了,尽管它所创建的Perl线程可能尚未执行完毕,但是他们还是会被强制中止,正所谓皮之不存,毛将焉附。这时你也许会得到一个类似于“Perlexitedwithactivethreads”的警告。

当然,你也可以显示地调用exit()方法来结束一个Perl线程,不过值得注意的是,默认情况下,如果你在一个Perl线程中调用了exit()方法,其他Perl线程都会随之一起结束,在很多情况下,这也许不是你想要的,如果你希望exit()方法只在调用它的Perl线程内生效,那么你在创建该Perl线程的时候就需要设置’exit’=>’thread_only’。例如

清单7.为某个Perl线程设置’exit’=>’thread_only’属性 

  1. #!/usr/bin/perl  
  2. #  
  3. usethreads;  
  4.  
  5. subsay_hello{  
  6. printf("Hellothread!@_.\n");  
  7. sleep(10);  
  8. printf("Bye\n");  
  9. }  
  10.  
  11. subquick_exit{  
  12. printf("Iwillbeexitinnotime\n");  
  13. exit(1);  
  14. }  
  15.  
  16. my$t1=threads->create(\&say_hello,"param1","param2");  
  17. my$t2=threads->create({'exit'=>'thread_only'},\&quick_exit);  
  18.  
  19. $t1->join();  
  20. $t2->join();  
  21.  

 如果你希望每个Perl线程的exit方法都只对自己有效,那么在每次创建一个新Perl线程的时候都去要显式设置’exit’=>’thread_only’属性显然有些麻烦,你也可以在引入threads包的时候设置这个属性在全局范围内有效,例如

清单8.设置’exit’=>’thread_only’为全局属性
 

  1. usethreads('exit'=>'threads_only');  
  2.  
  3. subfunc{  
  4. ...  
  5. if($condition){  
  6. exit(1);  
  7. }  
  8. }  
  9.  
  10. my$t1=threads->create(\&func);  
  11. my$t2=threads->create(\&func);  
  12.  
  13. $t1->join();  
  14. $t2->join();  

【编辑推荐】

 

  1. 技术分享 如何创建Perl线程
  2. Perl文件句柄概念详解
  3. 揭秘Perl线程历史
  4. Perl线程的生命周期
  5. 学习笔记 Perl数字与字符串间的自动转换

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-15 15:21:07

Perl线程

2011-01-28 15:30:47

AppsFireiOS原始应用

2020-06-12 15:19:09

AI 数据人工智能

2010-07-15 14:54:50

Perl线程

2010-07-20 16:13:25

Perl线程

2018-12-19 09:15:36

SDN软件定义网络广域网

2010-08-02 16:13:01

2010-07-14 10:41:58

Perl线程

2010-07-15 15:39:51

Perl线程

2010-07-26 13:27:19

Perl多线程

2011-10-25 10:07:54

2011-10-25 09:58:01

2012-04-29 16:20:04

2010-03-25 09:31:04

IT技术

2010-07-19 16:56:56

Perl线程

2010-07-14 10:48:37

Perl线程

2021-04-08 08:29:40

隐私Android谷歌

2009-02-17 19:02:33

2010-07-14 10:59:15

Perl线程

2023-12-11 22:23:02

点赞
收藏

51CTO技术栈公众号