本节作为指引性介绍,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);
}