嵌入式Linux系统编程学习之三十一线程的属性


前言

  pthread_create 的第 2 个参数 attr 是一个结构体指针,结构体元素分别指定新线程的运行属性,各成员属性为:
  _detachstate 表示新线程是否与进程中的其他线程脱离同步,如果置位则新线程不能用 pthread_join 函数来同步,且在退出时自行释放所占用的资源。默认为 PTHREAD_CREATE_JOINABLE 状态。这个属性也可以在线程创建并运行以后用 pthread_detach 函数来设置,而一旦设置为 PTHREAD_CREATE_DETACH 状态(不论是创建时设置还是运行时设置),则不能再恢复到 PTHREAD_CREATE_JOINABLE 状态。
  _schedpolicy 表示新线程的调度策略,主要包括 SCHED_OTHER (正常、非实时)、SCHED_RR (实时、轮转法) 和 SCHED_FIFO (实时、先入先出) 三种,默认为 SCHED_OTHER,后两种调度策略仅对超级用户有效。运行时可以用 pthread_setschedparam 函数来改变。
  _schedparam,一个 sched_param 结构,目前仅有一个 sched_priority 整型变量表示线程的运行优先级。这个参数仅当调度策略为实(即 SCHED_RR 或 SCHED_FIFO)时才有效,并可以在运行时通过 pthread_setschedparam 函数来改变,默认为 0。
  _inheritsched 有两种值可供选择,即 PTHREAD_EXPLICIT_SCHED 和 PTHREAD_INHERIT_SCHED,前者表示新线程使用显式指定调度策略和调度参数(即 attr 中的值),而后者表示继承调用者线程的值。默认为 PTHREAD_EXPLICIT_SCHED。
  _scope 表示线程间竞争 CPU 的范围,也就是说线程优先级的有效范围。POSIX 的标准中定义了两个值,即 PTHREAD_SCOPE_SYSTEM 和 PTHREAD_SCOPE_PROCESS ,前者表示与系统中所有线程一起竞争 CPU 时间,后者表示仅与同进程中的线程竞争 CPU。目前 Linux 仅实现了 PTHREAD_SCOPE_SYSTEM 一值。

  属性设置是由一些函数来完成的,通常调用 pthread_attr_init 函数进行初始化。
  设置绑定属性的函数为 pthread_attr_setscope;
  设置分离属性的函数是 pthread_attr_setdetachstate;
  设置线程优先级的相关函数 pthread_attr_getscehdparam(获取线程优先级)和 pthread_attr_setschedparam(设置线程优先级);
  在设置完成属性后调用 pthread_creat 函数创建线程。


一、线程属性初始化

  线程属性初始化为:

	int pthread_attr_init(pthread_attr_t *attr);

  attr :传出参数,表示线程属性,后面的线程属性设置函数都会用到。
  返回值:成功 0,失败 -1.

二、设置绑定属性

  设置绑定属性:

	pthread_attr_setscope(pthread_attr_t *attr, init scope);

  attr :线程属性
  scope :PTHREAD_SCOPE_SYSTEM(绑定),PTHREAD_SCOPE_PRCESS(非绑定)。
  返回值:成功 0,失败 -1。

三、设置分离属性

  设置分离属性:

	pthread_attr_setdetachstate(pthread_attr_t *attr, init detachstate);

  attr:线程属性
  detachstate:PTHREAD_CREATE_DETACHED(分离),PTHREAD_CREATE_JOINABLE(非分离)。
  返回值:成功 0,失败 -1。

四、获取线程优先级

  获取线程优先级:

	int pthread_attr_getschedparam(pthread_attr_attr *attr, struct sched_param *param);

  attr:线程属性。
  param:线程优先级。
  返回值:成功 0,失败 -1。

五、设置优先级

  设置优先级:

	int pthread_attr_setschedparam(pthread_attr_attr *attr, struct sched_param *param);

  attr:线程属性。
  param:线程优先级。
  返回值:成功 0,失败 -1。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值