Linux下的线程属性及优先级设置.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下的线程属性及优先级设置

Linux下的线程属性及优先级设置 线程的属性由pthread_attr_t结构类型表示。   在使用pthread_attr_t之前,需要调用pthread_attr_init对其初始化。pthread_attr_init为pthread_attr_t结构里面的各个属性设置默认值。程序可以修改这些值,定制线程的各个属性。在使用完pthread_attr_t后,需要调用pthread_attr_destroy,完成一些清理工作。   int pthread_attr_init ( pthread_attr_t *attr );   int pthread_attr_destroy ( pthread_attr_t *attr );   无需了解pthread_attr_t的具体结构,POSIX.1指定了一系列方法获取和设置pthread_attr_t结构里面的各个属性。   (1)分离状态(detached state):若线程终止时,线程处于分离状态,系统不保留线程终止的状态。当不需要线程的终止状态时,可以分离线程(调用pthread_detach 函数)。若在线程创建的时候,就已经知道以后不需要使用线程的终止状态时,可以在线程创建属性里面指定该状态,那么线程一开始就处于分离状态。通过下面两个函数,设置和获取线程的分离属性。   int pthread_attr_getdetachstate ( const pthread_attr_t *attr, int *state );   int pthread_attr_setdetachstate ( pthread_attr_t *attr, int state );   该属性的可选值有:PTHREAD_CREATE_DETACHED、PTHREAD_CREATE_JOINABLE。   (2)栈地址(stack address):POSIX.1定义了两个常量_POSIX_THREAD_ATTR_STACKADDR 和_POSIX_THREAD_ATTR_STACKSIZE检测系统是否支持栈属性。当然也可以给sysconf函数传递_SC_THREAD_ATTR_STACKADDR或 _SC_THREAD_ATTR_STACKSIZE来进行检测。当进程栈地址空间不够用时,指定新建线程使用由malloc分配的空间作为自己的栈空间。通过pthread_attr_setstackaddr和pthread_attr_getstackaddr两个函数分别设置和获取线程的栈地址。传给pthread_attr_setstackaddr函数的地址是缓冲区的低地址(不一定是栈的开始地址,栈可能从高地址往低地址增长)。   int pthread_attr_getstackaddr ( const pthread_attr_t *attr, void **addr );   int pthread_attr_setstackaddr ( pthread_attr_t *attr, void *addr );   (3)栈大小(stack size):当系统中有很多线程时,可能需要减小每个线程栈的默认大小,防止进程的地址空间不够用;当线程调用的函数会分配很大的局部变量或者函数调用层次很深时,可能需要增大线程栈的默认大小。函数pthread_attr_getstacksize和 pthread_attr_setstacksize被提供。   int pthread_attr_getstacksize ( const pthread_attr_t *attr, size_t *size );   int pthread_attr_setstacksize ( pthread_attr_t *attr, size_t size );   函数pthread_attr_getstack和pthread_attr_setstack函数可以同时操作栈地址和栈大小两个属性:   int pthread_attr_getstack ( const pthread_attr_t *attr, void **stackaddr, size_t *size );   int pthread_attr_setstack ( pthread_attr_t *attr, void *stackaddr, size_t size );   (4)栈保护区大小(stack guard size):在线程栈顶留出一段空间,防止栈溢出。当栈指针进入这段保护区时,系统会发出错误,通常是发送信号给线程。该属性默认值是PAGESIZE大小,该属性被设置时,系统会自动将该属性大小补齐为页大小的整数倍。当改变栈地址属性时,栈保护区大小通常清零

您可能关注的文档

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档