Perl線程學(xué)習(xí)指南
本文和大家重點討論一下Perl線程的概念,Perl線程是一個單一的執(zhí)行流程,它是所有程序執(zhí)行過程中最小的控制單位,即能被CPU所調(diào)度的最小任務(wù)單元。下面請看本文有關(guān)Perl線程概念詳細介紹。
Perl線程學(xué)習(xí)指南
1:創(chuàng)建Perl線程
usethreads;my$thr=threads->new(\&sub1);subsub1{print"Inthethreads";}
也可以通過creat創(chuàng)建Perl線程并為Perl線程傳遞參數(shù)
new=create
my$thr=threads->create(\sub1,@paramlist);
2:等待Perl線程結(jié)束
usethreads;my($thr)=threads->new(\sub1);my@return=$thr->join();subsub1{return('FiFty',1,2);}
注意在這個例子中,sub1返回的是一個list,所以我們需要在定義Perl線程時候使用my($thr),這是給$thr一個list的上下文
3:忽略一個Perl線程
join做三件事:等待Perl線程推出,清理Perl線程以及返回Perl線程返回值。
如果你對Perl線程沒啥興趣,可以使用detach不管它,Perl會自動收拾這個進程
usethreadsmy$thr=threads->create(\&sub1);$thr->detach();sleep(15);subsub1{my$a=0;while(1){$a++;print"\$ais$a\n";sleep1;}}
sleep在這里的作用是使主進程多運行一些時間,否則主程序推出則Perl線程也會退出
我們也可以在sub里面退出Perl線程
subsub1{threads->detach();}
4:數(shù)據(jù)共享
usethreads;usethreads::shared;my$foo:shared=1;my$bar=1;my$thr=threads->create(sub{$foo++;$bar++}->join();print$foo,"\n";#2print$bar,"\n";#1
使用hash作為共享數(shù)據(jù)要注意的是
my$foo:shared;my$bar;my%foo;$foo->{bar}=\$bar#錯誤,必須使用共享數(shù)據(jù)的引用
5:使用數(shù)據(jù)共享帶來的問題
考慮這樣一個程序
usethreads;usethreads::shared;my$a:shared=1;my$thr1=threads->create(\&sub1);my$thr2=threads->create(\&sub2);$thr1->join;$thr2->join;print("$a\n");subsub1{my$foo=$a;$a=$foo+1;}subsub2{my$bar=$a;$a=$bar+1;}
這時候a的值是多少呢?sub1和sub2都對變亮a進行了修改,所以a的值是不確定的,可能是2也可能是3(我試了n次都是3)
6:同步和控制
訪問控制:lock()
【編輯推薦】