執行緒 執行緒建立與終止

2021-07-29 17:31:24 字數 2288 閱讀 3076

#

include

intpthread_create

(pthread_t

*restrict thread,

const

pthread_attr_t

*restrict attr,

void*(

*start_routine)

(void*)

,void

*restrict arg

)

0,失敗返回錯誤號。

0,失敗返回

-1,而錯誤號儲存在全域性變數

errno

中,而庫

的函式都是通過

,雖然每個執行緒也都有乙個

errno

,但這是為了相容其它函式介面而提供的,

pthread

庫本身並不使用它,通過返回值返回錯誤碼更加清晰。

成功返回後,新建立的執行緒的

id被填寫到

thread

引數所指向的記憶體單元

thread_t

這個型別有不同的實現,它可能是乙個整數值,也可能是乙個結構體,也可能是乙個位址,所以不能簡單地當成整數用

printf

列印,呼叫

可以返回當前執行緒的id。

是執行緒屬性。

:使用者執行緒函式指標,引數型別和返回型別都有使用者定義。

的引數。

pthread_create

的錯誤碼不儲存在

errno

中,因此不能直接用

perror(3)

列印錯誤資訊,可以先用

strerror(3)

把錯誤碼轉換成錯誤資訊再列印。

exit

或_exit

,則整個程序的所有執行緒都終止。

:arial;color:black">posix

arial;mso-bidi-font-family:arial;color:black">的執行緒終止有兩種情況:正常終止和非正常終止。

arial;color:black">

arial;mso-bidi-font-family:arial;color:black">

從執行緒函式

return

。這種方法對主線程不適用,從

main

函式return

相當於呼叫

exit。

執行緒可以呼叫

pthread_exit

終止自己。

乙個執行緒可以呼叫

pthread_cancel

終止同一程序中的另乙個執行緒。

#

include

void

pthread_exit

(void

*value_ptr)

;void

pthread_cancel

(pthread_t tid)

;

pthread_exit

或者return

返回的指標所指向的記憶體單元必須是全域性的或者是用

malloc

#

include

intpthread_join

(pthread_t thread,

void

**value_ptr)

;int

pthread_detach

(pthread_t tid)

;

執行緒以不同的方法終止,通過

pthread_join

得到的終止狀態是不同的,總結如下: 如果

thread

執行緒通過

return

返回,value_ptr

所指向的單元裡存放的是

thread

執行緒函式的返回值。 如果

thread

執行緒被別的執行緒呼叫

pthread_cancel

異常終止掉,

value_ptr

所指向的單元裡存放的是常數

pthread_canceled。

如果thread

執行緒是自己呼叫

pthread_exit

終止的,

value_ptr

所指向的單元存放的是傳給

pthread_exit

的引數。

thread

執行緒的終止狀態不感興趣,可以傳

null

給value_ptr

引數。 0

給主人留下些什麼吧!~~

執行緒建立 終止

乙個程序中的所有執行緒都可以訪問程序的組成部件,如檔案描述符和記憶體。不管在什麼情況下,只要單個資源需要在多個使用者間共享,就必須處理一致性問題。每個執行緒都包含表示執行環境所必須的資訊,其中包括程序中表示執行緒的執行緒id,一組暫存器檔案,棧,排程優先順序和策略,訊號遮蔽字,errno變數以及執行...

執行緒控制(一) 執行緒的建立與終止

引言 我們先在學的執行緒都是使用者級庫執行緒 posix 我們通過基本的學習認識到了與執行緒有關的函式構成了乙個完整的系列,絕大多數的函式的名字都是以 pthread 打頭的,在使用這些函式的時候引入的標頭檔案是 pthread create函式 錯誤檢查 1 include 2 include 3...

執行緒 終止執行緒執行

stop 方法 缺點 強制終止會丟資料 不建議使用 public class myfile catch interruptedexception e 5秒後終止執行緒 t.stop 已過時,強制終止會丟資料 class myrunnable implements runnable catch int...