pthread_attr_init

pthread_attr_init,函式,作用是初始化一個執行緒對象的屬性,需要用pthread_attr_destroy函式對其去除初始化。

基本介紹

  • 外文名:pthread_attr_init
  • 屬性:初始化一個執行緒對象的屬性
  • 頭檔案:#include<pthread.h>
  • 參數:指向一個執行緒屬性的指針
簡介,頭檔案,函式聲明,返回值,參數說明,示例:創建一個脫離執行緒,對應理解,

簡介

頭檔案

#include<pthread.h>

函式聲明

int pthread_attr_init(pthread_attr_t *attr);

返回值

返回0,表示函式初始化對象成功。失敗時返回一個錯誤代碼。

參數說明

指向一個執行緒屬性結構的指針,結構中的元素分別對應著新執行緒的運行屬性。屬性對象主要包括是否綁定、是否分離、堆疊地址和大小、優先權等。默認屬性為非綁定、非分離、默認1MB堆疊、與父進程有相同優先權。

示例:創建一個脫離執行緒

關於脫離執行緒的說明:
使用pthread_create()函式創建執行緒時,函式第二個參數為NULL,則使用執行緒屬性的默認參數,其中非分離屬性需要程式退出之前運行pthread_join把各個執行緒歸併到一起。如果想讓執行緒向創建它的執行緒返回數據,就必須這樣做。但是如果既不需要第二個執行緒向主執行緒返回信息,也不需要主執行緒等待它,可以設定分離屬性,創建“脫離執行緒”。
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>const char message[] = "Hello, Linux.";int thread_finished = 0;void thread_function(void *arg){ pthread_t newthid; newthid = pthread_self(); printf("New thread, thread ID = %lu, argument is: %s\n",                        newthid, (char*)arg); sleep(3); printf("New thread sets thread_finished flag and exits.\n"); thread_finished = 1; pthread_exit(NULL);}int main(int argc, char *argv[]){ int ret; pthread_t thid; pthread_attr_t attr; ret = pthread_attr_init(&attr); if(ret != 0){ printf("Error pthread_attr_init()!"); exit(EXIT_FAILURE); //執行緒屬性初始化出錯退出 } ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(ret != 0){ printf("Error pthread_attr_setdetachstate()!"); exit(EXIT_FAILURE); //執行緒分離屬性設定出錯退出 } //create a new thread ret = pthread_create(&thid, &attr, (void*)&thread_function, (void*)message); if(ret != 0){ printf("Error pthread_create()!"); exit(EXIT_FAILURE); } //銷毀執行緒屬性結構,它在重新初始化之前不能重新使用 pthread_attr_destroy(&attr); while(!thread_finished){ printf("Main thread, waiting for other thread finished...\n"); sleep(1); } printf("Other thread fiinshed. Bye!\n");  return 0;}

相關詞條

熱門詞條

聯絡我們