POSIX執行緒 4 執行緒的屬性

2021-06-05 23:48:56 字數 3223 閱讀 4995

執行緒屬性有下面幾個方面:

作用域(scope)                       決定執行緒優先順序範圍,程序內還是系統範圍。

pthread_scope_process            程序

pthread_scope_system          系統

分離狀態(deteached state)     分離執行緒在結束的時候不保留任何狀態資訊,

釋放它所占有的資源,不能用join同步。

ptheard_create_detached       分離狀態

ptheard_create_joinable          預設狀態

優先順序(priority)                           可以設定改變執行緒的優先順序。

sched_get_priority_max          最大

sched_get_priority_min           最小

排程策略                                     可以設定和改變執行緒的排程策略

sched_fifo         先進先出

sched_rr             時間片輪轉

執行緒棧大小                                 pthead_attr_setstacksize[/getstacksize]

執行緒棧位址                                  pthead_attr_setstackaddr[/getstackaddr]

繼承屬性 :                               

繼承性的可能值是pthread_inherit_sched(表示新現成將繼承建立執行緒的排程策略和引數)和pthread_explicit_sched(表示使用在schedpolicy和schedparam屬性中顯式設定的排程策略和引數)。

要使用使用在

schedpolicy和schedparam屬性中顯式設定的排程資訊。必須在設定之前將inheritsched屬性設定為pthread_explicit_sched.

執行緒屬性函式:

int pthread_attr_init(pthread_attr_t *attr);

int pthread_attr_destroy(pthread_attr_t *attr);

int pthread_attr_getdetachstate(const pthread_attr_t * attr,int *detachstate);

int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);

int pthread_attr_getinheritsched(const pthread_attr_t *attr,int *inheritsched);

int pthread_attr_setinheritsched(pthread_attr_t *attr,int inheritsched);

int pthread_attr_getschedpolicy(const pthread_attr_t *attr,int *policy);

int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);

int pthread_attr_getschedparam(const pthread_attr_t *attr,struct sched_param *param);

int pthread_attr_setschedparam(pthread_attr_t *attr,const struct sched_param *param);

int sched_get_priority_max(int policy);

int sched_get_priority_min(int policy);

int pthread_attr_setscope(pthread_attr_t *attr,int scope);

int pthread_attr_getscope(const pthread_attr_t *attr,int *scope);

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);

int pthread_attr_getstackaddr(const pthread_attr_t *attr,void **stackaddf);

int pthread_attr_setstackaddr(pthread_attr_t *attr,void *stackaddr);

int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,size_t *restrict guardsize);

int pthread_attr_setguardsize(pthread_attr_t *attr ,size_t *guardsize);

#include #include #include #include void *thread_function(void *arg);

char message = "hello world";

int thread_finished = 0;

int main()

res = pthread_attr_setdetachstate(&thread_attr, pthread_create_detached);

if (res != 0)

res = pthread_create(&a_thread, &thread_attr, thread_function, (void *)message);

if (res != 0)

(void)pthread_attr_destroy(&thread_attr);

while(!thread_finished)

printf("other thread finished, bye!\n");

exit(exit_success);

}void *thread_function(void *arg)

Posix執行緒程式設計指南 4 執行緒終止

執行緒終止方式 一般來說,posix的執行緒終止有兩種情況 正常終止和非正常終止。執行緒主動呼叫pthread exit 或者從執行緒函式中return都將使執行緒正常退出,這是可預見的退出方式 非正常終止是執行緒在其他執行緒的干預下,或者由於自身執行出錯 比如訪問非法位址 而退出,這種退出方式是不...

posix執行緒 執行緒的取消

初看這個主題時,覺得實在簡單。在我印象中,執行緒取消的實現通常是宣告乙個全域性變數來代表取消標誌,乙個執行緒在最開始的大while中判斷該標誌是否被設定,如果被設定就跳出迴圈。但是這有乙個問題是,如果程式中有n個執行緒都有可能被取消,那麼我們是否要宣告n個全域性變數來單獨控制它們的取消?posix提...

Posix多執行緒筆記(三) 執行緒屬性(2)

四 執行緒的排程策略 函式pthread attr setschedpolicy和pthread attr getschedpolicy分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy 功能 ...