linux内核线程优先级设置,Linux c 线程属性,线程优先级的修改
Linux c 线程属性,线程优先级的修改
发布时间:2018-07-19 10:24,
浏览次数:1290
, 标签:
Linux
线程属性的设置,网上找的文章总感觉不够全面,还是结合man手册查看。
线程属性设置,分两个方式,一种是在创建之前,通过pthread_attr_t
结构体传入,另一种,是线程创建完已经在运行时,通过部分函数设置。一般常见的是创建线程时传NULL,使用默认属性,后续运行时根据需要动态修改,也就第二种方式。
一:线程创建前设置属性:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
1.0 第一个参数,用来保存创建好后线程uid
2.0 第二个参数,即线程属性,通常传NULL,表示默认属性,这个属性在创建前可以设置,包括调度策略,栈大小,优先级等等
3.0 第三个参数,即线程入口函数
4.0 第四个参数,传给线程的参数
所以在创建线程前,对 第二个参数 pthred_attr_t 结构体进pthread_attr_t 进行赋值
1.0 pthread_attr_init(pthread_attr_t *attr);//使用默认值填充初始化
2.0//获取设置栈大小 //这个属性只能在线程创建前设置,后面不能动态修改了
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
3.0 //设置获取调度策略
SCHED_FIFO, SCHED_RR, and
SCHED_OTHER //policy支持这三种值,
1.0SCHED_OTHER 分时调度策略,
2.0SCHED_FIFO实时调度策略,先到先服务
3.0,SCHED_RR实时调度策略,时间片轮转
SCHED_OTHER(分时调度)是不支持优先级使用的,其他两个实时调度可以
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
4.0 //设置调度参数,目前这个参数里面就一个量,优先级 //用户程序设置实时任务这个优先级,值越大,优先级越高
(内核里面优先级是用另外的一个值,具体查看这个文章:
http://www.360doc.com/content/13/0801/09/7775902_303961368.shtml
)
struct sched_param {
int sched_priority; /* Scheduling priority */
};
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param
*param);
int pthread_attr_getschedparam(pthread_attr_t *attr,struct sched_param *param);
5.0//是否分离属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
上面这些都是静态,在创建线程之前的设置。
二:一般,都在线程创建完后,动态地设置:
1.0 设置调度策略和优先级
#include
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);
int sched_getscheduler(pid_t pid); //获取线程当前优先级
struct sched_param {
int sched_priority;
};
//获取支持的最大最小值
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
2.0 设置分离属性
int pthread_detach(pthread_t thread);
int pthread_join(pthread_t thread, void **retval);
3.0 设置线程名称
调用 prctl(PR_SET_NAME, “my_threadname”);
线程默认名称,貌似是父进程的名称,未去考究,在linux上我们用 ps -p pid -T 来查看进程号为
pid的子线程的情况,如果用上面的方式设置了线程名称,则会列出名称
关于 prctl
process control, #man prctl 上面的是 (2),说明这是一个系统调用函数,根据他的全名顾名思义就是用来控制
process的,(linux内核里面的实现,线程其实就是进程,只是对进行了一些资源的共享,所以经常说线程是轻量级的进程)
关于ps 命令, -p 表示进程号,
-T表示列出子线程。所以上面设置线程名称,更多的时用来调试多线程程序的时候方便调试的,毕竟在程序里面直接用线程pid就可以唯一确定线程的身份了,但是没有名称看的直接,比如没有设置名称的线程:
看一下man手册里面详细的关于PR_SET_NAME的介绍
名称长度不能超过 16bytes(包含 结束符号'\0'),也可以通过库函数 pthread_setname_np来调用,线程的这个属性,可以通过
/proc文件系统来查看,即/proc/self/task/[tid]/comm
linux内核线程优先级设置,Linux c 线程属性,线程优先级的修改相关推荐
- Linux内核开发_1_编译LInux内核
目录 1. 准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2. Linux内核配置 2.1 配置选项 1. make config 2. ...
- Linux内核入门-如何获取Linux内核源代码、生成配置内核
如何获取Linux内核源代码 如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包.除 ...
- linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- 查看linux内核的编译时间,linux内核编译步骤
linux内核编译步骤 对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在我归纳了一下,写出这一篇还算比较详细的步骤,希望能对各位新手 ...
- 【Linux 内核】调度器 ⑨ ( Linux 内核调度策略 | SCHED_NORMAL 策略 | SCHED_FIFO 策略 | SCHED_NORMAL 策略 | SCHED_BATCH策略 )
文章目录 一.Linux 内核调度策略源码 二.SCHED_NORMAL 策略 三.SCHED_FIFO 策略 四.SCHED_NORMAL 策略 五.SCHED_BATCH 策略 六.SCHED_I ...
- 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...
- 【Linux 内核】进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )
文章目录 一.Linux 内核中的进程状态 二.TASK_RUNNING 状态 三.TASK_RUNNING 状态 四.TASK_UNINTERRUPTIBLE 状态 五.__TASK_STOPPED ...
- linux内核学习之三:linux中的32位与64位
linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...
- 一文了解linux内核,一文了解Linux的系统结构
什么是 Linux ? 如果你以前从未接触过Linux,可能就不清楚为什么会有这么多不同的Linux发行版.在查看Linux软件包时,你肯定被发行版.LiveCD和GNU之类的术语搞晕过.初次进入Li ...
- 在win10查看本机linux的文件,Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件...
原标题:Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件 来源:创事记 终于!在Windows里可以访问Linux文件了. 这表明,微软插入开源界的触角,越来越深入 ...
最新文章
- python 2: 解决python中的plot函数的图例legend不能显示中文问题
- (转)软件开发人员如何提高自己的软件专业技术方面的具体建议
- Git 分支 - rebase 变基
- java 数组 反射_【译】10. Java反射——数组
- PHP5异常处理,PHP5异常处理分析实例
- 查看IIS日志 各大搜索引擎是否访问网站
- .NET图像处理包 DotImage
- unistd.h中定义函数
- 四个简单的步骤告别烦人的flash广告
- win7 企业版 kms 批量激活 简单配置.
- 电子设计教程21:晶体管差分放大电路
- 从微盟员工删库跑路看程序员的职业素养。
- (三)Spring整合RabbitMQSpringBoot 整合RabbitMQRabbitMQ 镜像队列
- 如何连接手机和电脑,用电脑控制安卓手机
- 16秋南开计算机应用答案,南开16秋学期“计算机应用基础”在线作业.doc
- 【 MES】 MES的另一视角
- ACM大一练习赛-第三场------G - EPR悖论克鲁斯卡尔算法
- Android 下拉刷新框架实现
- 「DNS」和「CDN」
- Openwrt chaos_calmer 版本在Ubuntu18上编译问题汇总