執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。執行緒的預設屬性是非分離狀態,這種情況下, 原有的執行緒等待建立的執行緒結束。只有當 pthread_join()函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己運 行結束了,執行緒也就終止了,馬上釋放系統資源。程式設計師應該根據自己的需要,選擇適當的分離狀態。
從上面的描述中可以得知如果呼叫pthread_create函式建立乙個預設非分離狀態的執行緒,如果不用pthread_join()函式,執行緒結束時並不算終止,所以仍然會占用系統資源。這裡有如下幾種方法解決這個問題:
1.使用pthread_join()函式**相關記憶體區域。
pthread_t tid;
void
* state;
pthread_create
(&tid,
null
,test
,null);
pthread_join
(tid,
&state);
2.可以呼叫 pthread_detach() 函式分離執行緒。
pthread_t tid;
pthread_create
(&tid,
null
,test
,null);
pthread_detach
(tid);
當然,也可以在 thread function 中呼叫。
void
*test
(void
*arg)
3.使用執行緒屬性。
pthread_attr_t attr;
pthread_t tid;
pthread_attr_init
(&attr)
;pthread_attr_setdetachstate
(&attr,
pthread_create_detached);
pthread_create
(&tid,
&attr,
test
,null);
sleep
(3);
//等待執行緒結束
pthread_attr_destroy
(&attr);
執行緒的分離狀態
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。執行緒的預設屬性,一般是非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止...
執行緒的分離狀態
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。執行緒的預設屬性,一般是非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止...
執行緒的分離狀態
執行緒的分離狀態是執行緒的一種屬性,執行緒的屬性結構為 typedef struct int detachstate 分離狀態 int schedpolicy 排程策略 structsched param schedparam 排程引數 int inheritsched 執行緒繼承性 int sco...