執行緒等待
為什麼需要執行緒等待呢?
1、已經退出的執行緒,其空間沒有被釋放,任然在程序的位址空間內pthread_join函式:2、建立新的執行緒不會服用剛才退出執行緒的位址空間
//等待執行緒結束
int pthread_join(pthread_t thread,void **value_ptr);
//引數thread:執行緒id
//value_ptr:指向乙個指向執行緒的返回值的指標
//返回值:成功返回0,失敗返回錯誤碼
呼叫該函式的執行緒將掛起等待(阻塞式的等),直到id為thread的執行緒終止。thread執行緒以不同的方法終止,通過pthread_join得到的終止狀態是不同的:
1、如果thread執行緒通過return返回,value_ptr所指向的單元裡存放的是thread執行緒函式的返回值2、如果被別的執行緒呼叫pthread_cancel異常終 止掉,value_ptr所指向的單元裡存放的是常數pthread_canceled((void*)-1)
3、如果是自己呼叫pthread_exit終止的,value_ptr所指向的記憶體單元存放的是傳給pthread_exit的引數
4、如果對執行緒的終止狀態不關心,可以傳null給value_ptr引數
#include
#include
#include
#include
#include
void *thread1(void *arg)
void *thread2(void *arg)
void *thread3(void *arg)
return null;
}int main()
else
printf("thread return,thread id = %lu,return code : null\n",tid);
return
0;}
執行結果如下:
分離執行緒
預設情況下,新建立的執行緒是joinable的。執行緒退出以後,需要對其進行pthread_join操作,否則無法釋放資源,從而造成系統洩漏。如果不關心執行緒的返回值,join是一種負擔,這個時候我們可以告訴系統,當執行緒退出時,自動釋放執行緒資源。
//執行緒組內其他執行緒對目標現執行緒進行分離
int pthread_detach(pthread_t thread);
//執行緒自己分離自己
int pthread_detach(pthread_self());
需要注意的一點就是:joinable和分離是衝突的,乙個執行緒不可能既是joinable又是分離的。執行緒被分離了,所以就不需要被等待了,結束以後會自動釋放資源,但是即使該執行緒被分離,一旦該執行緒出現異常時依舊會影響程序。
#include
#include
#include
#include
#include
void *thread_run(void *arg)
int main()
int ret = 0;
sleep(1);
if(pthread_join(tid,null) == 0)
else
return ret;
}
測試結果如下: 執行緒(二) 執行緒控制 後台執行緒
設定執行緒為後台執行緒,前台執行緒結束後,後台執行緒也就結束了 這個有乙個時間差 setdaemon boolean on 檢測線程是否是後台執行緒 isdaemon public class daemonthread extends thread param args public static ...
執行緒控制與執行緒分離
一 執行緒控制 1 執行緒概念 執行緒是資源排程的基本單位,執行緒是程序內部的乙個執行流,在程序的位址空間內執行。在linux 下沒有真正意義上的執行緒,執行緒是用程序模擬的,又被稱為輕量級程序。2 執行緒資源 乙個程式中的多個執行緒共享同一位址空間,因此 段,資料段內容是共享的。除此之外,以下內容...
執行緒控制 二
linux中有兩種方式使執行緒終止 1 通過return從執行緒函式返回 2 通過呼叫函式pthread exit 使執行緒退出 pthread exit在標頭檔案pthread.h中宣告,函式原型為 include void pthread exit void retval 注意 1 在主線程中,...