Linux 之多线程编程-线程属性控制

在创建线程时,我们可以直接指定其线程属性,也可以后续通过特定函数修改其某个属性值。线程属性的结构体声明如下:

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以回收资源。

你可能感兴趣的:(Linux)