在创建线程时,我们可以直接指定其线程属性,也可以后续通过特定函数修改其某个属性值。线程属性的结构体声明如下:
typedef struct _pthread_attr_s
{
int __detachstate;
int __schedpolicy;
struct __sched_param __schedparm;
int __interitsched;
int __scope;
size_t __guardsize;
int __stackaddr_set;
void* __stackaddr;
size_t __stacksize;
}pthread_attr_t;
各参数含义如下:
__detachstate:设置该线程是处于分离状态还是可连接状态,即是否可被等待,默认值为PTHREAD_CREATE_JOINABLE,即默认可被等待。
__schedpolicy:线程使用的调度策略,例如FIFO,时间片轮转法以及优先级策略等,默认使用优先级策略
__schedparm:调度策略的参数,例如当线程为优先级策略时,该值表示当前线程的优先级值默认为0
__interitsched:设置该线程的属性值是继承父线程属性还是从属性对象中获取,默认从不继承
__guardsize:创建的线程守护区大小,我也不知道有什么用
__stackaddr:创建线程使用的栈空间起始地址,默认为NULL,即由系统分配
__stacksize:创建线程的栈堆空间总大小,默认为0,即系统自行分配
1、初始化/销毁线程属性对象
/*初始化线程属性对象*/
int pthread_attr_init(pthread_attr_t* attr);
/*销毁线程属性对象*/
int pthread_attr_destory(pthread_attr_t* attr);
pthread_attr_init函数只有一个参数,即初始化之后的属性对象,该函数将属性对象初始化为系统默认值。
2、获取/设置线程的__detachstate属性
/*获取线程的__detachstate属性*/
int pthread_attr_getdetachstate(pthread_attr_t* attr,int* detachstate);
/*设置线程的__detachstate属性*/
int pthread_attr_setdetachstate(pthread_attr_t* attr,int detachstate);
pthread_attr_setdetachstate函数用来将使用属性对象attr所创建的所有线程处于处于detachstate状态。detachstate的选项有2个:
PTHREAD_CREATE_DETACHED:使得使用属性对象attr所创建的所有线程处于处于分离状态,即在线程终止时,其资源由系统自行回收,且不能被其他线程等待。
PTHREAD_CREATE_JOINABLE:使得使用属性对象attr所创建的所有线程处于处于连接状态,即在线程终止时,其资源不会被系统主动回收,必须调用pthread_join以回收资源。