【Linux 内核】线程调度示例一 ① ( 获取线程调度策略 | 断言 assert | 代码示例 )
2023-09-14 09:07:27 时间
一、获取线程调度策略
获取线程调度策略 核心函数 是 pthread_attr_getschedpolicy
函数 ;
获取线程 " 调度策略 " 函数 :
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
获取的调度策略通过 int *policy
参数返回 ;
如果函数执行成功 , 返回 0 0 0 ;
如果函数执行失败 , 返回错误代码 :
- EINVALEINVAL :
pthread_attr_t *attr
线程未初始化 , 或者 ,int policy
不是有效调度策略 ; - EFAULTEFAULT :
pthread_attr_t *attr
指针无效 ; - ENOTSUPENOTSUP : 尝试将调度策略修改为 SCHED_FIFO 或 SCHED_RR 实时调度策略 ;
二、断言 assert
使用 断言 assert , 保证下面的代码正常执行 , 如果 断言条件成立 , 则 继续执行 , 否则退出程序 ;
// 断言操作 , 保证下面的代码正常执行 , 如果 ret == 0 继续执行 , 否则进程退出
assert(ret == 0);
三、获取线程调度策略 代码示例
获取线程调度策略 源码 :
/**
* @brief 获取线程调度策略
*
* @return int
*/
static int get_thread_policy(pthread_attr_t *p_attr){
// 用于接收调度策略返回值
int policy;
// 获取线程的调度策略, 如 SCHED_FIFO, SCHED_RR, SCHED_OTHER
int ret = pthread_attr_getschedpolicy(p_attr, &policy);
// 断言操作 , 保证下面的代码正常执行 , 如果 ret == 0 继续执行 , 否则进程退出
assert(ret == 0);
// 打印调度策略
switch (policy)
{
case SCHED_FIFO:
printf("SCHED_FIFO 类型调度策略\n");
break;
case SCHED_RR:
printf("SCHED_RR 类型调度策略\n");
break;
case SCHED_OTHER:
printf("SCHED_OTHER 类型调度策略\n");
break;
default:
printf("未知类型调度策略 %d\n", policy);
break;
}
return policy;
}
相关文章
- [Linux] 关于Unix哲学
- 【华为云技术分享】Linux内核的分布式编译(2)
- Linux进程间通信(四):命名管道 mkfifo()、open()、read()、close()
- Linux内核的文件预读readahead
- https://www.runoob.com/linux/mysql-install-setup.html
- Linux - 执行命令与脚本
- windows 操作系统使用 pscp 拷贝文件到 Linux 系统遇到的错误消息
- 【Linux 内核 内存管理】物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )
- 【Linux 内核 内存管理】分区伙伴分配器 ① ( 分区伙伴分配器源码数据结构 | free_area 空闲区域数组 | MAX_ORDER 宏定义 | 空闲区域的页最大阶数 )
- 【Linux 内核 内存管理】memblock 分配器编程接口 ② ( memblock_add_range 函数分析 | memblock_insert_region 函数分析 )
- 【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
- 【Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )
- 【Linux 内核】CFS 调度器 ③ ( 计算进程 “ 虚拟运行时间 “ )
- 【Linux 内核】进程管理 ( 进程与操作系统 | 进程与程序 | 进程与线程 | 虚拟地址空间 )
- 【Linux 内核】编译 Linux 内核 ③ ( 安装 ncurses | 安装 flex | 安装 bison | 打开 Linux 内核编译配置菜单 )
- Redhat Linux 下安装Oracle 11g R2
- 嵌入式linux开发,Qt中,为不用的Kit设定不同的条件编译,以区分不同平台引用的三方库和不同的代码调用
- 嵌入式Linux开发,USB声卡驱动,内核配置
- Linux【实操篇】—— 进程管理、服务管理、软件包管理(rpm、yum)
- 【Deepin 20系统】Linux系统安装gcc报错no acceptable C compiler found in $PATH
- Linux内核Thermal框架详解十三、Thermal Governor(3)
- linux内核radeon gpu源码解析3 —— Radeon初始化
- Linux基于v4l2的视频采集(可用)
- Linux常用命令——常用网络命令