perl中的執行緒

2021-09-30 01:58:46 字數 2271 閱讀 4577

(1)直接執行子程式,按順序由上到下執行**,乙個執行緒內執行

sub test0

&test0

;print

"main 0\n"

;print

"main 1\n"

; 結果:test0 0

test0 1

finish test0

main 0

main 1

(2)用create建立執行緒後的執行過程

use threads;

sub test0

my$thr0

= threads->create(

\&test0);

print

"main 0\n"

;print

"main 1\n"

;$thr0

->join;

結果: main 0

main 1

test0 0

test0 1

finish test0

可見用create建立執行緒以後,不等test0子程式執行完,就開始執行下面的列印資訊,直到呼叫join函式,才將test0子程式執行過程中的列印資訊列印出來,join操作的意思是:「對該執行緒收屍並收集該執行緒的返回值」。

use threads;

sub test0

my$thr0

= threads->create(

\&test0);

sleep 2

;print

"main 0\n"

;print

"main 1\n"

;$thr0

->join;

結果: test0 0

test0 1

finish test0

main 0

main 1

use threads;

&test_thread

;&test0

;&test1

;sub test0

sub test1

sub test_thread

}print

"finish test_thread\n";}

結果: after create thread0

test0 0

test0 1

finish test0

after create thread1 and thread0

test1 0

test1 1

finish test1

finish test_thread

test0 0

test0 1

finish test0

test1 0

test1 1

finish test1

4)執行緒id

sub test_thread

}print

"finish test_thread\n";}

新加入的列印id的**:

$cur_id:0

$thr0_id:1

$thr1_id

:2

三個執行緒主線程、thr0、thr1的id不同,通過id可以區分不同的執行緒。可以理解為在主線程主幹上分出來了兩個分支作為分支執行緒 。

threads->self()可以獲取當前執行緒物件。類方法threads->tid()來獲取當前執行緒物件的id。對於已知道tid的執行緒,可以使用類方法threads->object($tid)去獲取這個tid的執行緒物件。注意,object()只能獲取正啟用的執行緒物件,對於joined和detached執行緒,都返回undef,不僅如此,對於無法收集的執行緒物件,object()都返回undef,例如收集$tid不存在的執行緒。

5)執行緒狀態

所以,threads->list()只能統計未detach、未join的執行緒,running返回的是正在執行子程式主體的執行緒,joinable返回的是已完成子程式主體的執行緒,all返回的是它們之和。

$thr->is_running()如果該執行緒正在執行,則返回true

$thr->is_joinable()如果該執行緒已經完成了子程式的主體(即running剛結束),且未detach未join,換句話說,這個執行緒是joinable,於是返回true

$thr->is_detached() threads->is_detached() 測試該執行緒或執行緒自身是否已經detach

Perl 的執行緒中的共享

執行緒是乙個好東西,他不象程序占用那麼多的記憶體,因不他不需要主空間,不需要程序控制塊。他只共享所有主程序的所有內容。所以今天我們來研究一下執行緒的特點之一,共享的變數。如果你打算使用執行緒,常常會在多個子執行緒之間共享一些變數,常用的共享的變數可以是標量,陣列,雜湊 hash 之類,好象 glob...

perl 多執行緒

b size large align center perl 多執行緒 align size b 1.建立多執行緒 thread new start thread,mho start thread是子函式,用來執行執行緒所執行的內容。mho傳遞給子函式的引數。2.例項 perl use strict...

perl實現多執行緒

用perl實現多執行緒 use strict use english no match vars use errno qw eagain use threads use threads shared my items 20 需要處理的任務數 my maxchild 65 最多執行緒數 1 65 pe...