*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...