執行緒控制 二

2021-07-16 00:27:33 字數 1674 閱讀 6481

*linux中有兩種方式使執行緒終止

>1.通過return從執行緒函式返回

>2.通過呼叫函式pthread_exit()使執行緒退出

pthread_exit在標頭檔案pthread.h中宣告,函式原型為:

#include

void pthread_exit(void *retval)

*注意:

>1.在主線程中,如果從main函式返回或呼叫了exit函式退出主線程,則整個程序終止.此時程序中所有執行緒也將終止,因此在主線程不能過早的從main函式返回.

>2.如果主線程呼叫pthread_exit函式,則僅僅是主線程消亡,程序不會結束,程序內的執行緒也不會終止,直到所有執行緒結束,程序才會結束.

資源釋放

*特別是臨界資源,臨界資源在一段時間內只能被乙個執行緒所持有,當執行緒要使用臨界資源時需提出請求,如果該資源未被使用則申請成功,否則等待.臨界資源使用完畢後要釋放以便其他執行緒可以使用.

*臨界資源為乙個執行緒所獨佔,當乙個執行緒終止時,如果不釋放其占有的臨界資源,則該資源會被認為還被已經退出的執行緒所使用,因而永遠不會得到釋放.如果乙個執行緒在等待使用這個臨界資源,它就可能無限的等待下去,這就形成了死鎖.往往是災難性的.

自動釋放資源

>pthread_cleanup_push()

>pthread_cleanup_pop()

*注意:pthread_cleanup_push()帶有乙個』』,

所以這兩個函式必須成對出現,且必須位於程式的統一**段中才能通過編譯.

*終止的執行緒所占用的資源不會隨著執行緒的終止而歸還系統,而是仍為執行緒所在的程序持有.

等待程序結束

pthread_join()

*注意:

乙個執行緒僅允許乙個執行緒使用pthread_join()等待它的終止,並且被等待的執行緒應該處於可join狀態.即非detached狀態.處於detached狀態的執行緒無法由pthread_join()同步.

*乙個可"join"的執行緒所占用的記憶體僅當有執行緒對其執行了pthread_join()後才會釋放,為了避免記憶體洩漏,所有的執行緒終止時,要麼已被設為detached,要麼使用pthread_join()來**資源.

*乙個執行緒不能被多個執行緒等待,否則第乙個接收到訊號的執行緒成功返回,其餘呼叫pthread_join()的執行緒返回錯誤**esrch.

*等待執行緒結束:

//等待執行緒結束

#include

#include

#include

void assisthread(void *arg)

int main(void)

*執行緒私有資料採用了一鍵多值的技術,即乙個鍵對應多個數值.訪問資料時都是通過鍵值來訪問,好像是對乙個變數進行訪問,其實是在訪問不同的資料.

pthread_key_create:  建立乙個鍵

pthread_setspecific:  為乙個鍵設定執行緒私有資料

pthread_getspecific:  從乙個鍵讀取執行緒私有資料

pthread_key_delete:  刪除乙個鍵

執行緒(二) 執行緒控制 後台執行緒

設定執行緒為後台執行緒,前台執行緒結束後,後台執行緒也就結束了 這個有乙個時間差 setdaemon boolean on 檢測線程是否是後台執行緒 isdaemon public class daemonthread extends thread param args public static ...

執行緒控制 join執行緒

在我們做專案的時候時常會有這樣的一種需求 我們需要執行兩個方法,乙個方法要等另乙個方法執行完才能執行,這樣的狀況放到多執行緒中要怎麼實現呢?今天就來看看多執行緒中的join方法。我們的均方法通常是把乙個大問題分成許多小問題,每個小問題分配乙個執行緒,當所有的小問題都得到處理後,在呼叫主線程來進一步操...

執行緒 之 執行緒控制

下面有幾種方法可以很好的控制線程的執行。1.join 執行緒控制 2.後台執行緒 守護執行緒 3.sleep執行緒睡眠 4.yield執行緒讓步 1.join 執行緒控制。thread提供了讓乙個執行緒等待另外乙個執行緒完成的方法 join 方法 意思 當在a程式執行流 執行緒 中呼叫b執行緒的ji...