pthread线程属性介绍
线程属性
创建线程函数
int pthread_create (pthread_t* restrictthread, const pthread_attr_t* restrictattr,void* (*start_routine) (void*), void* restrict arg);
的第二个參数即为线程属性,传空指针表示使用缺省属性。
线程属性为一个结构体。详细例如以下
typedef struct
{
int detachstate; //线程的分离状态
int schedpolicy; //线程调度策略
structsched_param schedparam; //线程的调度參数
int inheritsched; //线程的继承性
int scope; //线程的作用域
size_t guardsize; //线程栈末尾的警戒缓冲区大小
void* stackaddr; //线程栈的位置
size_t stacksize; //线程栈的大小
}pthread_attr_t;
一、线程分离状态:detachstate
该属性决定了线程运行任务后以什么方式来结束自己。
方式如下:
(1) PTHREAD_CREATE_DETACHED —— 分离线程
置为分离线程的线程。当不须要被不论什么线程等待,线程运行完任务后,自己自己主动结束线程,并释放资源。
(2) PTHREAD_CREATE_JOINABLE(缺省) —— 可汇合线程
可汇合线程为线程的默认状态,这样的情况下,原有的线程等待创建的线程结束。仅仅有当pthread_join()函数返回时。创建的线程才算终止。才干释放自己占用的系统资源。
二、线程的调度策略:schedpolicy
(1) SCHED_FIFO(先进先出策略)
FIFO线程持续执行,直至有更高优先级的线程就绪,或者线程本身进入堵塞状态。
当FIFO线程堵塞时,系统将其移出就绪队列,恢复后再增加到同优先级就绪队列的末尾。当FIFO线程被高优先级线程抢占时。它在就绪队列中的位置不变。因此一旦高优先级线程终止或堵塞,被抢占的FIFO线程会马上继续执行
(2) SCHED_RR(轮转策略)
每一个RR线程会获得一个时间片,一旦RR线程的时间片耗尽,系统即将移到就绪队列的末尾。
(3) SCHED_OTHER(缺省)
静态优先级为0。不论什么就绪的FIFO线程或RR线程,都会抢占此类线程。
三、调度參数 : sched_param schedparam
这两个函数具有两个參数。第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函数分别得到。
注意:假设不是编写实时程序,不建议改动线程的优先级。由于,调度策略是一件很复杂的事情,假设不对使用会导致程序错误,从而导致死锁等问题。
如:在多线程应用程序中为线程设置不同的优先级别,有可能由于共享资源而导致优先级倒置。
四、线程的继承性: inheritsched
(1) PTHREAD_INHERIT_SCHED(缺省) —— 调度属性自创建者线程继承
(2) PTHREAD_EXPLICIT_SCHED —— 调度属性由调度參数和调度策略决定
继承性决定调度的參数是从创建的进程中继承还是使用在schedpolicy和schedparam属性中显式设置的调度信息。Pthreads不为inheritsched指定默认值,因此假设你关心线程的调度策略和參数,必须先设置该属性。
五、线程的作用域:scope
线程的竞争范围。
PTHREAD_SCOPE_SYSTEM ——在系统范围内竞争资源。
PTHREAD_SCOPE_PROCESS(Linux不支持)——在进程范围内竞争资源
六、线程栈末尾的警戒缓冲区大小:guardsize
该属指定线程末尾的警戒缓冲区大小,在缺省的情况下为一个内存页(4096字节)
七、线程栈的位置:stackaddr
八、线程栈的大小:stacksize
pthread线程属性介绍的更多相关文章
- 【C/C++多线程编程之四】终止pthread线程
多线程编程之终止pthread线程 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 终止线程似乎是多线程编程的最后一步,但绝不是本系列教 ...
- [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]
Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– ...
- [并发并行]_[线程模型]_[Pthread线程使用模型之二 工作组work crew]
Pthread线程使用模型之二工作组(Work crew) 场景 1.一些耗时的任务,比如分析多个类型的数据, 是独立的任务, 并不像 pipeline那样有序的依赖关系, 这时候pipeline就显 ...
- [并发并行]_[线程模型]_[Pthread线程使用模型之一管道Pipeline]
场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win ...
- 分享一个关于pthread线程栈在mm_struct里面的分布问题
大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案. 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙看看错漏的地方. 1================问题: 在使用p ...
- 【C/C++多线程编程之五】pthread线程深入理解
多线程编程之pthread线程深入理解 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念.在进一步学 ...
- 【C/C++多线程编程之十】pthread线程私有数据
多线程编程之线程私有数据 Pthread是 POSIX threads 的简称.是POSIX的线程标准. 线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...
- [转]c++多线程编程之pthread线程深入理解
多线程编程之pthread线程深入理解 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念.在进一 ...
- pthread 线程立即取消的两种方法
1.相关函数介绍 a. int pthread_cancel(pthread_t thread) 1发送终止信号给thread线程,如果成功则返回0,否则为非0值.发送成功并不意味着thread会终止 ...
随机推荐
- day2--SecureCRT的配置
生产中,我们是看不到虚拟机的工作界面,虚拟机的界面相当于机房显示屏的样子,实际上我们是在操作工具里面进行管理,这里使用SecureCRT远程连接虚拟机,SecureCRT的设置如下: 1.打开Secu ...
- layui + jfinal 实现上传下载
1.需要把jfinal的环境配置好 2.导入相关的库文件 layui的库文件 就是这两个文件需要导入到自己的页面 注意:jfinal总会把路径拦截,所以需要静态文件处理.本人不太懂.就网上找了下,说w ...
- ASP.NET Core集成现有系统认证
我们现在大多数转向ASP.NET Core来使用开发的团队,应该都不是从0开始搭建系统,而是老的业务系统已经在运行,ASP.NET Core用来开发新模块.那么解决用户认证的问题,成为我们的第一个拦路 ...
- VIM于换行EOL的思考
\n LF 0A 将当前光标切换到下一行(不一定行首)\r CR OD 将当前光标置于行首 在windows与unix系统中,unix将\n代表换行并置于行首,而windows保持原意.即unix:\ ...
- pycharm安装和首次使用
PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS. Windows. Linux 系统. PyCharm 功能 : 调试.语法高亮.Project管理.代码 ...
- shell全自动登录远程终端
先看效果 你需要做的事情,在配置文件中配置服务器信息,选择对应的服务器,进行连接. 传统手工连接 #密码方式 ssh user@ip # 然后输入服务器密码 #密钥登录 ssh -i identity ...
- Shiro SpringMVC 非maven HelloWorld
项目用到Shiro就从网上找一些案例看看吧,结果看了很多都是maven的,没有办法就自己弄了一个.废话不多说,原理自己找开始上菜. 配置web.xml <?xml version="1 ...
- HTML5原生拖拽/拖放⎡Drag & Drop⎦详解
前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准的一部分.我从几个方面学习并实践这个功能. 拖放的流程 ...
- 5分钟搞定iOS抓包Charles,让数据一清二楚
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesproxy.com/download/ 2. HTTP ...
- jQuery与别的js框架冲突
jQuery.noConflict()运行这个函数将变量$的控制权让渡给第一个实现它的那个库. 这有助于确保jQuery不会与其他库的$对象发生冲突. <script type="te ...