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

博客介绍了创建线程时线程属性的设置方式,可直接指定或后续修改。阐述了线程属性结构体各参数含义,如__detachstate、__schedpolicy等。还介绍了初始化/销毁线程属性对象,以及获取/设置__detachstate属性的相关函数和选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值