这篇文章主要介绍了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’属性
#!/usr/bin/perl # usethreads; subsay_hello{ printf("Hellothread!@_.\n"); sleep(10); printf("Bye\n"); } subquick_exit{ printf("Iwillbeexitinnotime\n"); exit(1); } my$t1=threads->create(\&say_hello,"param1","param2"); my$t2=threads->create({'exit'=>'thread_only'},\&quick_exit); $t1->join(); $t2->join();
如果你希望每个Perl线程的exit方法都只对自己有效,那么在每次创建一个新Perl线程的时候都去要显式设置’exit’=>’thread_only’属性显然有些麻烦,你也可以在引入threads包的时候设置这个属性在全局范围内有效,例如
清单8.设置’exit’=>’thread_only’为全局属性
usethreads('exit'=>'threads_only'); subfunc{ ... if($condition){ exit(1); } } my$t1=threads->create(\&func); my$t2=threads->create(\&func); $t1->join(); $t2->join();
感谢你能够认真阅读完这篇文章,希望小编分享的“Perl线程怎么消亡”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。