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 線程棧的最低地址
#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)