linux線程 join/detach


linux中創建線程時,可以通過 __attr 指定線程的屬性

extern int pthread_create (pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg);

 

線程屬性有四個:

1.detachstate 線程的分離狀態屬性

#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate);
int pthread_attr_setdetachstate(const pthread_attr_t *attr, int *detachstate);

可以使用pthread_attr_setdetachstate把線程屬性detachstate設置為以下兩個合法值之一:PTHREAD_CREATE_DETACHED,PTHREAD_CREATE_JOINABLE。線程的分離狀態決定一個線程以什么樣的方式來終止自己。

JOINABLE屬性即為非分離狀態,這種狀態的線程,可以被其他線程等待,pthread_join返回時,線程釋放資源。原有的線程等待創建的線程結束,只有當pthread_join()函數返回時,創建的線程才算終止,才能釋放自己占用的系統資源。如果其沒有被join,則它的狀態類似於進程中的Zombie Process,即還有一部分資源沒有被回收,需要將線程的退出代碼返回到父進程,才能終止自己。

分離狀態的終止的線程,不能被其他線程等待,線程結束后直接釋放資源。如果在創建線程時就知道不需要了解線程的終止狀態,可以修改pthread_attr_t結構中的detachstate屬性,讓線程一開始就處於分離狀態。

在子線程中加入代碼 pthread_detach(pthread_self()) 或者父線程調用 pthread_detach(thread_id)(非阻塞,可立即返回),這將該子線程的狀態設置為分離的(detached),如此一來,該線程運行結束后會自動釋放所有資源。

2.guardsize 線程棧末尾的警戒緩沖區大小(字節數)

3.stackaddr 線程棧的最低地址

4.stacksize 線程棧的最小長度
#include <pthread.h>
int pthread_attr_getstacksize(const pthread_attr_t *restrict attr, size_t *restrict stacksize)
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM