linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问 题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。
typedef struct {
int etachstate; //线程的分离状态
int schedpolicy; //线程调度策略
structsched_param schedparam; //线程的调度参数
int inheritsched; //线程的继承性
int scope;//线程的作用域
size_t guardsize;//线程栈末尾的警戒缓冲区大小
int stackaddr_set; //线程的栈设置
void* stackaddr; //线程栈的位置
size_t stacksize; //线程栈的大小
}pthread_attr_t;
注:目前线程属性在内核中不是直接这么定义的,抽象太深不便分析,为方便理解,我们使用早期的线程属性定义,两者之间定义的主要元素差别不大。
属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init, 这个函数必须在pthread_create函数之前调用。之后须用pthread_attr_destroy函数来释 放资源。线程属性主要包括如下属性:作用域(scope)、栈尺寸(stack size)、栈地址 (stack address)、优先级(priority)、分离的状态(detached state)、调度策略和 参数(scheduling policy and parameters)。默认的属性为非绑定、非分离、缺省M的堆 栈、与父进程同样级别的优先级。
1. 线程属性初始化
先初始化线程属性,再pthread_create创建线程
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr); //初始化线程属性
int pthread_attr_destroy(pthread_attr_t *attr); //销毁线程属性所占用的资源