本節作為指引性介紹,linux下線程的屬性是可以根據實際項目需要,進行設置,之前我們討論的線程都是采用線程的默認屬性,默認屬性已經可以解決絕大部分開發遇到的問題。如我們對程序的性能提出更高的要求那么需要設置線程屬性,比如可以設置線程棧的大小來降低內存的使用,增大最大線程個數。
typedef struct
{int etachstate; //線程的分離狀態int schedpolicy //線程調度策略struct sched_param sched_param; //線程的調度參數int inheritsched; //線程的繼承性int scope; //線程的作用域int guardsize; //線程棧末尾的警戒緩沖區大小int stackaddr; //線程棧的位置int stacksize; //線程棧的大小
} pthread_attr_t;
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>void *thrd_func(void *arg)
{pthread_exit((void*)77);}int main()
{pthread_t tid;int ret;pthread_attr_t attr;ret = pthread_attr_init(&attr);if(ret != 0) {fprintf(stderr, "pthread_init error: %s\n", strerror(ret));exit(1);}pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);ret = pthread_create(&tid, &attr, thrd_func, NULL);if(ret != 0) {fprintf(stderr, "pthread_create error: %s\n", strerror(ret));exit(1);}ret = pthread_join(tid, NULL);if(ret != 0) {fprintf(stderr, "pthread_join error: %s\n", strerror(ret));exit(1);}printf("-------------------------------join ret = %d\n", ret);pthread_exit((void*)1);
}
?