线程属性

创建线程函数

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线程属性介绍的更多相关文章

  1. 【C/C++多线程编程之四】终止pthread线程

    多线程编程之终止pthread线程       Pthread是 POSIX threads 的简称,是POSIX的线程标准.           终止线程似乎是多线程编程的最后一步,但绝不是本系列教 ...

  2. [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]

    Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– ...

  3. [并发并行]_[线程模型]_[Pthread线程使用模型之二 工作组work crew]

    Pthread线程使用模型之二工作组(Work crew) 场景 1.一些耗时的任务,比如分析多个类型的数据, 是独立的任务, 并不像 pipeline那样有序的依赖关系, 这时候pipeline就显 ...

  4. [并发并行]_[线程模型]_[Pthread线程使用模型之一管道Pipeline]

    场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win ...

  5. 分享一个关于pthread线程栈在mm_struct里面的分布问题

    大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案. 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙看看错漏的地方. 1================问题: 在使用p ...

  6. 【C/C++多线程编程之五】pthread线程深入理解

    多线程编程之pthread线程深入理解       Pthread是 POSIX threads 的简称,是POSIX的线程标准.           前几篇博客已经能给你初步的多线程概念.在进一步学 ...

  7. 【C/C++多线程编程之十】pthread线程私有数据

    多线程编程之线程私有数据      Pthread是 POSIX threads 的简称.是POSIX的线程标准.         线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...

  8. [转]c++多线程编程之pthread线程深入理解

    多线程编程之pthread线程深入理解         Pthread是 POSIX threads 的简称,是POSIX的线程标准.           前几篇博客已经能给你初步的多线程概念.在进一 ...

  9. pthread 线程立即取消的两种方法

    1.相关函数介绍 a. int pthread_cancel(pthread_t thread) 1发送终止信号给thread线程,如果成功则返回0,否则为非0值.发送成功并不意味着thread会终止 ...

随机推荐

  1. Spring MVC的配置与DispatcherServlet的分析

    Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一. Spring MVC工作原理简单来看如下图所示: 接下来进行Spring MVC的配置 首先我们配置Spring M ...

  2. RobotFramework自动化测试环境配置

    现在工作是做自动化测试平台维护的,平台用的C#做的,主要是用来测试CMBRun项目,它是c/s结构的项目,而b/s结构的项目主要使用RF+Python来做.做这块之前听过自动化测试,身边的朋友也有做这 ...

  3. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  4. js滚动加载小插件

    本文实例讲述了jquery滚动加载数据的方法.分享给大家供大家参考.具体分析如下: 少废话直接上代码!!!粗暴,直接,干脆 0//lk-2017-05-04 1(function($, win) { ...

  5. fragmentTabHost 使用示例

    目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost  ...

  6. 登山(Climb)

    题目: Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, --, n.每个山峰的高度都是不一样的.编号为i的山峰高度为hi.  小修从西往东登山.每到一座山峰,她就回头观望自己走 ...

  7. 项目详解4—haproxy 详解

    一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...

  8. 【机器学习】DNN训练中的问题与方法

    感谢中国人民大学的胡鹤老师,人工智能课程讲的很有深度,与时俱进 由于深度神经网络(DNN)层数很多,每次训练都是逐层由后至前传递.传递项<1,梯度可能变得非常小趋于0,以此来训练网络几乎不会有什 ...

  9. app打包常用操作

    1.修改appId android:打开build.gradle文件 找到defaultConfig{applicationId 'ceshi'} 修改测试.android studio会提示. Gr ...

  10. SurfaceView 及相关概念

    ============================================================= SurfaceView=========================== ...