线程属性 pthread_attr_t

参考资料:

  https://blog.csdn.net/hudashi/article/details/7709413

 

Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。

pthread_attr_t的主要属性的意义如下:
__detachstate,表示新线程是否与进程中其他线程脱离同步, 如果设置为PTHREAD_CREATE_DETACHED 则新线程不能用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,一个struct sched_param结构,目前仅有一个sched_priority整型变量表示线程的运行优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效,并可以在运行时通过pthread_setschedparam()函数来改变,缺省为0
__inheritsched,有两种值可供选择:PTHREAD_EXPLICIT_SCHEDPTHREAD_INHERIT_SCHED,前者表示新线程使用显式指定调度策略和调度参数(即attr中的值),而后者表示继承调用者线程的值。缺省为PTHREAD_EXPLICIT_SCHED
__scope,表示线程间竞争CPU的范围,也就是说线程优先级的有效范围。POSIX的标准中定义了两个值:PTHREAD_SCOPE_SYSTEMPTHREAD_SCOPE_PROCESS,前者表示与系统中所有线程一起竞争CPU时间,后者表示仅与同进程中的线程竞争CPU。目前LinuxThreads仅实现了PTHREAD_SCOPE_SYSTEM一值。
为了设置这些属性,POSIX定义了一系列属性设置函数,包括pthread_attr_init()、pthread_attr_destroy()和与各个属性相关的pthread_attr_getXXX/pthread_attr_setXXX函数。
在设置线程属性 pthread_attr_t 之前,通常先调用pthread_attr_init来初始化,之后来调用相应的属性设置函数。
主要的函数如下:
1、pthread_attr_init
功能:        对线程属性变量的初始化。
头文件:     <pthread.h>
函数原型:   int pthread_attr_init (pthread_attr_t* attr);
函数传入值:attr:线程属性。
函数返回值:成功: 0
失败: -1
2、pthread_attr_setscope
功能:        设置线程 __scope 属性。scope属性表示线程间竞争CPU的范围,也就是说线程优先级的有效范围。POSIX的标准中定义了两个值:PTHREAD_SCOPE_SYSTEMPTHREAD_SCOPE_PROCESS,前者表示与系统中所有线程一起竞争CPU时间,后者表示仅与同进程中的线程竞争CPU。默认为PTHREAD_SCOPE_PROCESS。目前LinuxThreads仅实现了PTHREAD_SCOPE_SYSTEM一值。
头文件:     <pthread.h>
函数原型:   int pthread_attr_setscope (pthread_attr_t* attr, int scope);
函数传入值:attr: 线程属性。
scope:PTHREAD_SCOPE_SYSTEM,表示与系统中所有线程一起竞争CPU时间,
PTHREAD_SCOPE_PROCESS,表示仅与同进程中的线程竞争CPU
函数返回值得:同1。
3、pthread_attr_setdetachstate
功能:        设置线程detachstate属性。该表示新线程是否与进程中其他线程脱离同步,如果设置为PTHREAD_CREATE_DETACHED则新线程不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省为PTHREAD_CREATE_JOINABLE状态。这个属性也可以在线程创建并运行以后用pthread_detach()来设置,而一旦设置为PTHREAD_CREATE_DETACH状态(不论是创建时设置还是运行时设置)则不能再恢复到PTHREAD_CREATE_JOINABLE状态。
头文件:      <phread.h>
函数原型:    int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);
函数传入值:attr:线程属性。
detachstate:PTHREAD_CREATE_DETACHED,不能用pthread_join()来同步,且在退出时自行释放所占用的资源
PTHREAD_CREATE_JOINABLE,能用pthread_join()来同步
函数返回值得:同1。
4、pthread_attr_setschedparam
功能:       设置线程schedparam属性,即调用的优先级。
头文件:     <pthread.h>
函数原型:   int pthread_attr_setschedparam (pthread_attr_t* attr, struct sched_param* param);
函数传入值:attr:线程属性。
param:线程优先级。一个struct sched_param结构,目前仅有一个sched_priority整型变量表示线程的运行优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效,并可以在运行时通过pthread_setschedparam()函数来改变,缺省为0
函数返回值:同1。
5、pthread_attr_getschedparam
功能:       得到线程优先级。
头文件:    <pthread.h>
函数原型:  int pthread_attr_getschedparam (pthread_attr_t* attr, struct sched_param* param);
函数传入值:attr:线程属性;
param:线程优先级;
函数返回值:同1。

转载于:https://www.cnblogs.com/rivsidn/p/10673748.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何让new操作符只构造,不申请内存

问题 c中的new操作符 通常完成两个工作 分配内存及调用相应的构造函数。 请问&#xff1a; 如何让new操作符不分配内存&#xff0c;只调用构造函数&#xff1f; 这样的用法有什么用&#xff1f; placement new的含义 placement new可以实现不分配内存&#xff0c;只调用…

Linux 下的多线程下载工具

2019独角兽企业重金招聘Python工程师标准>>> 最先用的是 Axel&#xff08;http://axel.alioth.debian.org/&#xff09;&#xff0c;功能还可以&#xff0c;不过下载文件最多支持到 2GB&#xff0c;再大的文件就不能下载了&#xff0c;真变态&#xff01; aget&…

Launcher结构之home screen

今天刚刚知道如果你的Eclipse里面的工程指向服务器里面的源码记住千万不能在Eclipse里编译~~会在服务器上的源码里多处很多的中间件这样make不了只能清除那些中间件才能编译比较麻烦 Home screen可以说是一个手机的最重要应用&#xff0c;就像一个门户网站的首页&#xff0c;直…

Python_迭代器和生成器的复习_38

迭代器和生成器 迭代器&#xff1a; 双下方法&#xff1a;很少直接调用的方法&#xff0c;一般情况下&#xff0c;是通过其他方法触发的 可迭代的协议——可迭代协议 含有__iter__ 的方法 (__iter__ in dir(数据)) 可迭代的一定可以被for循环 迭代器协议&#xff1a;含有 __ite…

Elasticsearch是如何做到快速索引的

最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作&#xff0c;花了些时间学习Elasticsearch的基础理论知识&#xff0c;整理了一下&#xff0c;希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确…

第13届年度Webby奖采用Silverlight / 13th Annual Webby Awards powered by Silverlight

13th Annual Webby Awards powered by Silverlight 第13届年度Webby奖采用Silverlight 原文连接&#xff1a;http://team.silverlight.net/case-study/13th-annual-webby-awards-powered-by-silverlight/ 原文分类&#xff1a;Case Study&#xff08;案例学习&#xff09; 原文…

纯C日志函数库 zlog

zlog - 纯C日志函数库 - 开源中国纯C日志函数库 zlog分享到 新浪微博腾讯微博已用 10收藏92参加 OSC 应用开发大赛&#xff0c;拿 Nexus 4 手机 星星之火&#xff0c;可以燎原zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。事实上&#xff0c;在C的世界里面没…

[十二省联考2019]字符串问题 后缀自动机 + 拓扑排序 + 最长路 + 倍增

题目描述&#xff1a;给定一个长串 $S$&#xff0c;给定若干 $S$ 的子串 $a_{i}$, $b_{i}$&#xff0c;再给出一些 $a$ 串和 $b$ 串的支配关系. 构造一个长度最长的字符串&#xff0c;使得&#xff1a;字符串只由 $a_{i}$ 组成.当且仅当 $a_{i}$ 所支配的一个串 $b_{i}$ 为 $a_…

分布式事务2PC、3PC模型

工作中使用最多的是本地事务&#xff0c;但是在对单一项目拆分为 SOA、微服务之后&#xff0c;就会牵扯出分布式事务场景 文章以分布式事务为主线展开说明&#xff0c;并且针对 2PC、3PC 算法进行详细的讲解&#xff0c;最后通过一个 Demo 来更深入掌握分布式事务&#xff0c;…

c# datatable用法总结

在项目中经常用到DataTable,如果DataTable使用得当&#xff0c;不仅能使程序简洁实用&#xff0c;而且能够提高性能&#xff0c;达到事半功倍的效果&#xff0c;现对DataTable的使用技巧进行一下总结。 一、DataTable简介 (1)构造函数 DataTable() 不带参数初始化DataT…

Python学习之路——装饰器

开放封闭原则&#xff1a;不改变调用方式与源代码上增加功能 1.不能修改被装饰对象(函数)的源代码&#xff08;封闭&#xff09; 2.不能更改被修饰对象(函数)的调用方式&#xff0c;且能达到增加功能的效果&#xff08;开放&#xff09;View Code装饰器 # 把要被装饰的函数作为…

通断时间面积法

背景&#xff1a; 来 源&#xff1a; 通断时间面积法是入选《供热计量技术规程》JGJ173-2009的一种热量分摊计量方法实现分户计量的一种计量方法。由清华大学建筑节能研究中心江亿院士提出。 简 称 ( 俗称 )&#xff1a;&#xff08;1&#xff09;“时温法”&#xff08;2&a…

C++ std::move()和完美转发

std::move()、std::forward<T>、模板类型推断分析 引用折叠原则和完美转发是有联系的&#xff0c;可以说后者是基于前者的某些特性实现的&#xff0c;具体来看一下。 要理解完美转发&#xff0c;需要了解两个知识点&#xff1a; 引用折叠原则&#xff08;Reference colla…

线面要素类相互转换-原创

一、线转面的步骤 1、线几何属性转面几何属性ArcToolbox-Data Management Tools-Features-Feature To polygon&#xff0c;此过程只是将几何属性做了转换&#xff0c;得到的是属性信息丢失了的面t_L_HDBX_FeatureToPolygon1 2、 在ArcMap中将t_L_HDBX_FeatureToPolygon1全选&a…

SEO网站标题怎么优化

经过前两天发的两篇原创文章被加精之后&#xff0c;我的热情是一发不可收拾&#xff0c;忍不住又想写点干货给大家分享&#xff01;今天分析一下网站标题如何设置之SEO技巧。通过标题就可以看出&#xff0c;今天是讲网站标题如何设置&#xff0c;为什么要写这个呢&#xff1f;因…

Redis淘汰删除策略

Redis淘汰删除策略Redis淘汰删除策略6种淘汰Key策略3种删除过期键策略定时删除惰性删除定期删除其他模块的淘汰处理RDB 快照持久化创建载入AOF 只追加持久化写入重写主从复模式下对过期键的处理6种淘汰Key策略Redis中通过maxmemory参数来设定内存的使用上限&#xff0c;当Redis…

MySQL NDB Cluster

1. MySQL Cluster 是一种技术&#xff0c;该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构&#xff0c;系统能够使用廉价的硬件&#xff0c;而且对软硬件无特殊要求。此外&#xff0c;由于每个组件有自己的内存和磁盘&#xff0c;不存在单点故…

《上邪》诗解

上邪&#xff01;①   我欲与君相知②&#xff0c; 长命③无绝衰。   山无陵④&#xff0c; 江水为竭&#xff0c;   冬雷震震⑤&#xff0c; 夏雨雪⑥ &#xff0c;   天地合⑦ &#xff0c; 乃敢⑧与君绝&#xff01;天啊&#xff01;我愿与你相爱&#xff0c;让我们…

win8 关于Adobe CS6系列软件Patch覆盖失败的问题(Photoshop CS6、Adobe Illustrator CS6、Adobe Fireworks CS6)...

我在Adobe文件夹下安装了Photoshop CS6和 Adobe Illustrator CS6&#xff0c;结果当我为AI覆盖Path文件后&#xff0c;我发现PS和AI全部都打不开了。反复覆盖还是没用。 不过很奇怪fireworks Cs6能用。FW我没有跟PS、AI装在同一个文件夹下。 我想难道是安装目录的问题&#xff…

获取Spring容器管理的Bean工具类

很多时候我们在一些不受spring管理的类中需要用到spring管理的Bean&#xff0c;那么这个时候可以使用如下工具类从spring容器中获取相关的Bean实例。 Component public class SpringApplicationContextUtils implements ApplicationContextAware {private static final Logger …