溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Perl線程怎么消亡

發(fā)布時(shí)間:2021-12-06 10:40:39 來(lái)源:億速云 閱讀:154 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了Perl線程怎么消亡,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Perl線程的消亡

大多數(shù)情況下,你希望你創(chuàng)建的Perl線程正常退出,這就意味著Perl線程所對(duì)應(yīng)的函數(shù)體在執(zhí)行完畢后返回并釋放資源。例如在清單5的示例中,新建Perl線程被join以后的退出過(guò)程??墒?,如果由于detach不當(dāng)或者由于主線因某些意外的異常提前結(jié)束了,盡管它所創(chuàng)建的Perl線程可能尚未執(zhí)行完畢,但是他們還是會(huì)被強(qiáng)制中止,正所謂皮之不存,毛將焉附。這時(shí)你也許會(huì)得到一個(gè)類似于“Perlexitedwithactivethreads”的警告。

當(dāng)然,你也可以顯示地調(diào)用exit()方法來(lái)結(jié)束一個(gè)Perl線程,不過(guò)值得注意的是,默認(rèn)情況下,如果你在一個(gè)Perl線程中調(diào)用了exit()方法,其他Perl線程都會(huì)隨之一起結(jié)束,在很多情況下,這也許不是你想要的,如果你希望exit()方法只在調(diào)用它的Perl線程內(nèi)生效,那么你在創(chuàng)建該P(yáng)erl線程的時(shí)候就需要設(shè)置’exit’=>’thread_only’。例如

清單7.為某個(gè)Perl線程設(shè)置’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();

如果你希望每個(gè)Perl線程的exit方法都只對(duì)自己有效,那么在每次創(chuàng)建一個(gè)新Perl線程的時(shí)候都去要顯式設(shè)置’exit’=>’thread_only’屬性顯然有些麻煩,你也可以在引入threads包的時(shí)候設(shè)置這個(gè)屬性在全局范圍內(nèi)有效,例如

清單8.設(shè)置’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();

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Perl線程怎么消亡”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI