1. 程式人生 > >linux多執行緒相關的API-(2)--執行緒屬性

linux多執行緒相關的API-(2)--執行緒屬性

參考:https://blog.csdn.net/pbymw8iwm/article/details/6721038

Linux多執行緒實踐(三)執行緒的基本屬性設定APIhttps://www.cnblogs.com/zsychanpin/p/6940673.html

執行緒屬性結構如下:

typedef struct

{

int detachstate;執行緒的分離狀態

int schedpolicy;執行緒排程策略

structsched_paramschedparam;執行緒的排程引數

int inheritsched;執行緒的繼承性

intscope;執行緒的作用域

size_tguardsize;執行緒棧末尾的警戒緩衝區大小

intstackaddr_set;

void*stackaddr;執行緒棧的位置

size_tstacksize;執行緒棧的大小

}pthread_attr_t;


設定執行緒屬性,一般在建立執行緒時來指定,pthread_create的第二個引數就是執行緒屬性,該形參傳入NULL意味著使用預設屬性。如果要自定義執行緒的屬性,應當填充一個pthread_attr_t結構變數並作為實參傳進去。

相關函式:

pthread_attr_init

pthread_attr_setXXXX

pthread_attr_getXXXX

pthread_attr_destroy

標準應用步驟/例項:

        pthread_t  tid;//子執行緒ID
        pthread_attr_t attr;//執行緒屬性

        pthread_attr_init(&attr);//把attr結構的成員都初始化為預設值(合法值)
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//修改屬性成員:分離態
        pthread_attr_setstacksize(&attr, 2048);//修改屬性成員: 堆疊大小
        //屬性結構體的每一項屬性成員都有對應的set和get函式,請檢視上面的參考連結

        //帶自定義屬性,建立子執行緒
        status = pthread_create(&tid, &attr, thread_entry, NULL);
        if(0 == status)
        {
                printf("creat thread ok, tid = %ld, with para: %d\n", tid, arg);
        }
        else
        {
                printf("creat thread failed, error info: %s\n", strerror(errno));
                return -1;
        }

        pthread_attr_destroy(&attr);//屬性值使用完必須銷燬