好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

线程属性详解.docx

9页
  • 卖家[上传人]:壹****1
  • 文档编号:437047206
  • 上传时间:2023-04-22
  • 文档格式:DOCX
  • 文档大小:14.06KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 线程属性 始化,在使用后需要对其去除初始化我们用pthread_attr_init函数对其初始化, 用pthread_attr_destroy对其去除初始化1.名称::pthread attr init/pthread attr destroy功能:对线程属性初始化/去除初始化头文件:#includevpthread.h>函数原形:int pthread_attr_init(pthread_attr_t*attr); int pthread attr destroy(pthread attr t*attr);参数:Attr线程属性变量返回值:若成功返回0若失败返回-1调用pthread_attr_init之后,pthread_t结构所包含的内容就是操作系统实现支 持的线程所有属性的默认值如果要去除对pthread_attr_t结构的初始化,可以调用pthread_attr_destroy函 数如果pthread_attr_init实现时为属性对象分配了动态内存空间, pthread_attr_destroy还会用无效的值初始化属性对象,因此如果经 pthread_attr_destroy 去除初始化之后的 pthread_attr_t 结构被 pthread_create 函数调 用,将会导致其返回错误。

      线程属性结构如下:typedef struct{intdetachstate;线程的分离状态intschedpolicy;线程调度朿略structsched_paramschedparam;线程的调度参数intinheritsched;线程的继承性intscope; 线程的作用域size_tguardsize;线程栈末尾的警戒缓冲区大小intstackaddr_set;void*stackaddr;线程栈的位置size_tstacksize;线程栈的大小}pthread_attr_t;每个属性都对应一些函数对其查看或修改下面我们分别介绍二、线程的分离状态线程的分离状态决定一个线程以什么样的方式来终止自己在默认情况下线 程是非分离状态的,这种情况下,原有的线程等待创建的线程结束只有当 pt hread_join ()函数返回时,创建的线程才算终止,才能释放自己占用的系 统资源而分离线程不是这样子的,它没有被其他的线程所等待,自己运行结束了, 线程也就终止了,马上释放系统资源程序员应该根据自己的需要,选择适当的 分离状态所以如果我们在创建线程时就知道不需要了解线程的终止状态,则可 以pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。

      2.名称::pthread attr getdetachstate/pthread attr setdetachstate功能:获取/修改线程的分离状态属性头文件:#includevpthread.h>函数原形:int pthread_attr_getdetachstate(const pthread_attr_t *attr,int *detachstate);int pthread attr setdetachstate(pthread attr t *attr,intdetachstate);参数:Attr线程属性变量Detachstate线程的分离状态属性返回值:若成功返回0若失败返回-1可以使用pthread_attr_setdetachstate函数把线程属性detachstate设置为下面的 两个合法值之一:设置为PTHREAD_CREATE_DETACHED,以分离状态启动线 程;或者设置为PTHREAD_CREATE_JOINABLE,正常启动线程可以使用 pthread_attr_getdetachstate 函数获取当前的 datachstate 线程属性以分离状态创建线程#iincludevpthread.h>void *child_thread(void *arg){printf(“child thread run!\n”);}int main(int argc,char *argv[]){pthread_ttid;pthread_attr_tattr;pthread_attr_init (&attr);pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); pthread_create(&tid,&attr,fn,arg);pthread_attr_destro y(&attr);sleep(l);}三、线程的继承性函数 pthread_attr_setinheritsched 和 pthread_attr_getinheritsched 分别用来设置 和得到线程的继承性,这两个函数的定义如下:名称::pthread_attr_getinheritsched pthread attr setinheritsched功能:获得/设置线程的继承性头文件:#includevpthread.h>函数原形:int pthread_attr_getinheritsched(const pthread_attr_t*attr,int *inheritsched);int pthread_attr_setinheritsched(pthread_attr_t *attr,intinheritsched);参数:attr 线程属性变量inheritsched 线程的继承性返回值:若成功返回0若失败返回-1。

      这两个函数具有两个参数,第1个是指向属性对象的指针,第2个是继承性 或指向继承性的指针继承性决定调度的参数是从创建的进程中继承还是使用在 schedpolicy和schedparam属性中显式设置的调度信息°Pthreads不为inheritsched 指定默认值,因此如果你关心线程的调度策略和参数,必须先设置该属性继承性的可能值是PTHREAD_INHERIT_SCHED (表示新现成将继承创建线 程的调度策略和参数)和PTHREAD_EXPLICIT_SCHED(表示使用在schedpolicy 和schedparam属性中显式设置的调度策略和参数)如果你需要显式的设置一个线程的调度策略或参数,那么你必须在设置之前 将 inheritsched 属性设置为 PTHREAD_EXPLICIT_SCHED.下面我来讲进程的调度策略和调度参数我会结合下面的函数给出本函数的 程序例子四、线程的调度策略函数 pthread_attr_setschedpolicy 和 pthread_attr_getschedpolicy 分别用来设置 和得到线程的调度策略名称::pthread_attr_getschedpolicy pthread attr setschedpolicy功能:获得/设置线程的调度策略头文件:#includevpthread.h>函数原形:int pthread_attr_getschedpolicy(const pthread_attr_t*attr,int *policy);int pthread attr setschedpolicy(pthread attr t *attr,intpolicy);参数:attr 线程属性变量policy 调度朿略返回值:若成功返回0若失败返回-1。

      这两个函数具有两个参数,第1个参数是指向属性对象的指针,第2个参数 是调度策略或指向调度策略的指针调度策略可能的值是先进先出(SCHED_FIFO )、轮转法(SCHED_RR),或其它(SCHED_OTHER)SCHED_FIFO策略允许一个线程运行直到有更高优先级的线程准备好,或者 直到它自愿阻塞自己在SCHED_FIFO调度策略下,当有一个线程准备好时, 除非有平等或更高优先级的线程已经在运行,否则它会很快开始执行SCHED_RR(轮循)策略是基本相同的,不同之处在于:如果有一个SCHED_RR策略的线程执行了超过一个固定的时期(时间片间隔)没有阻塞,而另外的 SCHED_RR或SCHBD_FIPO策略的相同优先级的线程准备好时,运行的线程将 被抢占以便准备好的线程可以执行当有SCHED_FIFO或SCHED_RR策赂的线程在一个条件变量上等持或等持加 锁同一个互斥量时,它们将以优先级顺序被唤醒即,如果一个低优先级的 SCHED_FIFO线程和一个高优先织的SCHED_FIFO线程都在等待锁相同的互斥 且,则当互斥量被解锁时,高优先级线程将总是被首先解除阻塞五、线程的调度参数函数 pthread_attr_getschedparam 和 pthread_attr_setschedparam 分别用来设置 和得到线程的调度参数。

      名称::pthread_attr_getschedparam pthread attr setschedparam功能:获得/设置线程的调度参数头文件:#includevpthread.h>函数原形:int pthread_attr_getschedparam(const pthread_attr_t*attr,struct sched_param *param);int pthread_attr_setschedparam(pthread_attr_t *attr,conststruct sched param *param);参数:attr 线程属性变量param sched param 结构返回值:若成功返回0若失败返回-1这两个函数具有两个参数,第1个参数是指向属性对象的指针,第2个参数 是sched_param结构或指向该结构的指针结构sched_param在文件 /usr/include/bits/sched.h 中定义如下:struct sched_param{intsched_priority;};结构sched_param的子成员sched_priority控制一个优先权值,大的优先权值 对应高的优先权。

      系统支持的最大和最小优先权值可以用sched_get_priority_max 函数和sched_get_priority_min函数分别得到注意:如果不是编写实时程序,不建议修改线程的优先级因为,调度策略 是一件非常复杂的事情,如果不正确使用会导致程序错误,从而导致死锁等问题 如:在多线程应用程序中为线程设置不同的优先级别,有可能因为共享资源而导 致优先级倒置 vsched h>int sched_get_priority_max(i nt policy);int sched_get_priority_m in (i nt policy);DescriptionThe sched_get_priority_max() and sched_get_priority_m in()。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.