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