執行緒屬性設定簡例
阿新 • • 發佈:2018-12-14
#include <stdio.h> #include <pthread.h> #include <string.h> #include <stdlib.h> int print_ntimes(char *str) { sleep(1); printf("%s\n", str); return 0; } void *th_fun(void* arg) { int n=3; while(n--) { print_ntimes("hello wxp\n"); } } int main(void) { pthread_t tid;//執行緒tid int err, detachstate, i=1; pthread_attr_t attr;//執行緒屬性結構體 size_t stacksize;//執行緒棧大小 void *stackaddr;//執行緒起始地址 pthread_attr_init(&attr);//初始化執行緒屬性 pthread_attr_getstack(&attr, &stackaddr, &stacksize);//初始化執行緒屬性後,獲取執行緒棧的起始地址和大小 printf("stackaddr=%p\n", stackaddr); printf("stacksize=%x\n",(int)stacksize); pthread_attr_getdetachstate(&attr, &detachstate);//初始化執行緒屬性後,獲取執行緒的狀態 if(detachstate==PTHREAD_CREATE_DETACHED) { printf("pthread detached\n"); } else if(detachstate==PTHREAD_CREATE_JOINABLE) { printf("pthread join\n"); } else { printf("pthread unknown"); } /*設定執行緒的分離屬性*/ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); while(1){ /*在堆上申請記憶體,指定執行緒棧的起始地址和大小*/ stackaddr=malloc(SIZE); if(stackaddr==NULL) { perror("malloc"); exit(1); } stacksize = SIZE; //設定執行緒的起始地址和大小 pthread_attr_setstack(&attr, stackaddr, stacksize); //建立執行緒 err = pthread_create(&tid, &attr, th_fun, NULL); if(err != 0) { printf("%s\n", strerror(err)); exit(1); } printf("%d\n", i++); } //銷燬執行緒屬性結構體 pthread_attr_destroy(&attr); return 0; }