RT-Thread学习笔记(三):线程管理
线程管理
- 线程管理相关概念
- 什么是时间片轮转
- 调度器锁
- 线程运行机制
- 线程的五种状态
- 动态和静态创建线程区别
- 动态和静态创建线程优缺点
- RT-Thread动态线程管理函数
- 动态创建线程
- 动态删除线程
- RT-Thread静态线程管理函数
- 静态创建线程
- 线程其他操作
- 线程启动
- 线程延时
- 获得当前执行的线程句柄
线程管理相关概念
什么是时间片轮转
时间片轮转主要用于相同优先级的线程,按线程所需时间片大小轮流运行
每个线程都需要配置时间片, 时间片仅对优先级相同的就绪态线程有效, 系统对其进行调度约束线程单次运行时长。
假设有 2 个优先级相同的就绪态线程 A 与 B, A 的时间片为 10, B 的时间片为 5, 那么系统会在A、 B 线程间来回切换执行, 并且每次对 A 线程执行 10 个节拍的时长, 对 B 线程执行 5个节拍的时长。
调度器锁
调度器是操作系统的核心,其主要功能就是实现线程的切换,即从就绪列表里面找到优先级最高的线程,然后去执行该线程。
调度器锁用于部分代码,避免被线程机制抢占
rt_enter_critical(); /* 进入临界区 */
/* 用户把需要上锁的代码放在这里 */
rt_exit_critical(); /* 退出临界区 */
线程运行机制
线程具有独立的栈空间, 当进行线程切换时, 会将当前线程的上下文存在栈中, 当线程要恢复运行时, 再从栈中读取上下文信息, 进行恢复。线程栈还用来存放函数中的局部变量。
线程的五种状态
动态和静态创建线程区别
动态创建线程是在运行时才动态创建线程的控制块和堆栈空间
静态创建线程是在编译时就将线程的控制块和堆栈空间预分配好,然后再初始化启动;
动态和静态创建线程优缺点
-
动态创建线程优点
对于非固定的线程(运行过程可以销毁,短暂使用的线程),灵活分配线程内存 -
静态创建线程优点
对于固定线程,不会产生动态内存分配,确保线程创建成功
创建速度快,用于确认线程的项目可提前发现内存是否不足
RT-Thread动态线程管理函数
动态创建线程
rt_thread_t rt_thread_create( const char *name, //线程名称void (*entry)(void *parameter), //线程的入口函数void *parameter, //入口函数的参数指针rt_uint32_t stack_size, //线程堆栈的大小rt_uint8_t priority, //线程优先级rt_uint32_t tick) //线程调度的时间片大小
创建成功,返回线程句柄;创建失败,返回RT_NULL
动态删除线程
rt_err_t rt_thread_delete(rt_thread_t thread);
删除线程成功,返回RT_EOK ;删除线程失败,返回-RT_ERROR
RT-Thread静态线程管理函数
静态创建线程
rt_err_t
rt_thread_init(struct rt_thread *thread, //线程控制块指针const char *name, //线程名称void (*entry)(void *parameter), //线程的入口函数void *parameter, //入口函数的参数指针void *stack_start, //线程堆栈的起始地址rt_uint32_t stack_size, //线程堆栈的大小rt_uint8_t priority, //线程的优先级rt_uint32_t tick) //线程调度的时间片大小
线程其他操作
线程启动
rt_err_t rt_thread_startup(rt_thread_t thread);
线程延时
rt_err_t rt_thread_sleep(rt_tick_t tick); // 以 1 个 OS Tick 为单位
rt_err_t rt_thread_delay(rt_tick_t tick); // 以 1 个 OS Tick 为单位
rt_err_t rt_thread_mdelay(rt_int32_t ms); // 以 ms 为单位
获得当前执行的线程句柄
rt_thread_t rt_thread_self(void);
相关文章:

RT-Thread学习笔记(三):线程管理
线程管理 线程管理相关概念什么是时间片轮转调度器锁线程运行机制线程的五种状态 动态和静态创建线程区别动态和静态创建线程优缺点RT-Thread动态线程管理函数动态创建线程动态删除线程 RT-Thread静态线程管理函数静态创建线程 线程其他操作线程启动线程延时获得当前执行的线程…...

pymysql连接Mariadb/Mysql出现错误(配置正确情况下)解决办法
场景:在kali中使用python中pymysql对Mariadb进行连接,在整个过程中配置全部正确,但是就是无法进行连接,提示结果如下: Access denied for user rootlocalhost解决办法:进入数据库中,将默认密码…...

数据仓库扫盲系列(1):数据仓库诞生原因、基本特点、和数据库的区别
数据仓库的诞生原因 随着互联网的普及,信息技术已经深入到各行各业,并逐步融入到企业的日常运营中。然而,当前企业在信息化建设过程中遇到了一些困境与挑战。 1、历史数据积存。 过去企业的业务系统往往是在较长时间内建设的,很…...

DataX-web安装部署和使用
DataX-web的环境准备 MySQL (5.5) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库 JDK (1.8.0_xxx) 必选 DataX 必选 Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在do…...
sqlmap防御以及文件读写
一.防御 过滤 1.使用过滤函数 $email filter_var($_POST[email], FILTER_VALIDATE_EMAIL); if ($email) { // input is a valid email address } else { // input is not a valid email address 使用 filter_var() 函数和 FILTER_VALIDATE_EMAIL 过滤器来验证用户输…...

【源码】C/C++运动会计分系统 期末设计源码
文章目录 题目介绍功能源码效果展示带报告(内容) 题目介绍 使用语言: 两个版本都会发: 版本1:C语言 版本2: C 代码量: 500 题目介绍: 要求:初始化输入:N-参赛…...
Ubuntu安装Docker
卸载官方库中之前的旧版本 sudo apt-get remove docker docker-engine docker-ce docker.io更新安装包列表 sudo apt-get update安装以下包以使apt可以通过HTTPS使用存储库 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common添…...
useReducer+createContext真的可以代替Redux吗?
概念 useReducer useReducer 是 React 提供的一个状态管理钩子,通常用于管理组件的复杂状态逻辑。它采用两个参数:reducer 函数和初始状态。Reducer 函数接受当前状态和一个操作(action),并返回一个新的状态。这有点…...
Mysql忘记登入密码找回 方法(超详细)
如果你找不到 MySQL 的安装路径,可以尝试以下几种方法: 检查环境变量:打开命令提示符,并运行以下命令: echo %PATH% 这会显示系统的环境变量。查找其中是否包含 MySQL 相关的路径,例如 C:\Program Files…...

NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)
NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂) 文章目录 NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂)前言按键输入常用接口pinModedigitalRead 示例代码结论 前言 ESP8266如何检测外部信号的输入,通常…...
Oracle如何插入图片数据?
1、创建表,注意:插入图片的列要定义成BLOB类型 create table image_lob(t_id varchar2(5) not null,t_image blob not null);2、创建图片目录,images为目录名 create or replace directory "images" as f:\pic\;3、创建存储过程&am…...

C++特性——inline内联函数
1. 内联函数 1.1 C语言的宏 在C语言中,我们学习了用#define定义的宏函数,例如: #define Add(x, y) ((x) (y)) //两数相加相较于函数,我们知道宏替换具有如下比较明显的优点: 性能优势: 宏在预处理阶段…...

pensieve运行的经验
1运行run_videopy时出现如下问题: cmd: Union[List[str], str], ^ SyntaxError: invalid syntax原因是EasyProcess版本与python版本不对应,解决办法可见之前这篇博客:SyntaxError: invalid syntax。 2解决完上述问题后,输…...

Qt实现一个电子相册
一、要实现的功能 在窗口中可以显示图片,并且能够通过两个按钮进行图片的前进和后退的顺序切换。有一个按钮,通过这个按钮可以从所存图片资源中随机选取一个图片进行展示通过按钮可以控制图片自动轮播顺序切换的开始与停止,显示当前系统的时…...
R语言:因子分析 factor analysis
文章目录 因子分析数据集处理步骤主成分法做因子分析最大似然法做因子分析因子分析 因子分析的用途与主成分分析类似,它也是一种降维方法。由于因子往往比主成分更易得到解释,故因子分析比主成分分析更容易成功,从而有更广泛的应用。 从方法上来说,因子分析比主成分分析更为…...

SOFAStack软件供应链安全产品解析——SCA软件成分分析
近年来,软件供应链安全相关攻击事件呈快速增长态势,造成的危害也越来越严重,为了保障软件供应链安全,各行业主管单位也出台了诸多政策及技术标准。基于内部多年的实践,蚂蚁数科金融级云原生PaaS平台SOFAStack发布完整的…...
vue中ElementUi的el-table表格绑定行点击事件
<el-table v-loading"loading" :data"messagesList" row-click"goToMassage">handleRowClick(row, event, column) {// 在这里处理行点击事件console.log(行点击事件:, row, event, column);}...

力扣:盛最多水的容器
题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 …...
3D双目跟踪瞳孔识别
人眼数据集通常用于眼部相关的计算机视觉、眼动追踪、瞳孔检测、情感识别以及生物特征识别等领域的研究和开发。以下是一些常见的人眼数据集: BioID Face Database: 这个数据库包含1,521张近距离的人脸图像,其中包括瞳孔位置的标记。它通常用于瞳孔检测和…...

【java】Java项目从开发到部署生产完整流程梳理
文章目录 前言一、开发环境二、项目搭建2.1 Maven创建项目2.1.1 创建maven项目2.1.2 引入依赖2.1.3 maven常用命令 三、SpringBoot基础配置四、项目打包4.1 打包jar4.2 打包war4.2.1 修改项目打包为war包4.2.2 排除内嵌的tomcat,引入外部tomcat4.2.3 添加servlet-ap…...
分布式计算框架学习笔记
一、🌐 为什么需要分布式计算框架? 资源受限:单台机器 CPU/GPU 内存有限。 任务复杂:模型训练、数据处理、仿真并发等任务耗时严重。 并行优化:通过任务拆分和并行执行提升效率。 可扩展部署:适配从本地…...

【RabbitMQ】- Channel和Delivery Tag机制
在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…...

可视化图解算法48:有效括号序列
牛客网 面试笔试 TOP101 | LeetCode 20. 有效的括号 1. 题目 描述 给出一个仅包含字符(,),{,},[和],的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列&…...

ubuntu 20.04挂载固态硬盘
我们有个工控机,其操作系统是ubuntu 20.04。可以接入一个固态硬盘。将固态硬盘插好后,就要进行挂载。在AI的指导下,过程并不顺利。记录如下: 1、检查硬盘是否被识别 安装好硬盘后,运行以下命令来检查Linux系统是否…...
互斥锁与消息队列的架构哲学
更多精彩内容请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎更多精彩内容请访问:更多精彩内容请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎 一、资源争用的现实镜像 当多个ATM机共用一个现金库时,…...
如何写一篇基于Spring Boot + Vue + 微信小程序的软件的接口文档
如何写一篇基于Spring Boot Vue 微信小程序的软件的接口文档 下面是一个例子,仅供参考! 基于Spring Boot Vue 微信小程序的博客系统接口文档 技术栈:Spring Boot 3.x Vue 3 Element Plus 微信小程序原生框架 文档版本:v1…...
F5 – TCP 连接管理:会话、池级和节点级操作
在 F5 BIG-IP 中,您可以在池成员级别或节点级别管理流向服务器的流量。节点级别状态会影响与该节点关联的所有池,而池成员状态则仅限于单个池。了解每种方法以及何时使用它们对于顺利进行维护窗口和流量管理至关重要。 池级状态:启用、禁用、强制离线、移除 在 BIG-IP 配置…...

破解HTTP无状态:基于Java的Session与Cookie协同工作指南
HTTP协议自身是属于“无状态”协议 无状态是指:默认情况下,HTTP协议的客户端和服务器之间的这次通信,和下次通信之间没有直接的关系 但在实际开发中,我们很多时候是需要知道请求之间的关联关系的 上述图中的令牌,通常就…...

佰力博科技与您探讨材料介电性能测试的影响因素
1、频率依赖性 材料的介电性能通常具有显著的频率依赖性。在低频下,偶极子的取向极化占主导,介电常数较高;而在高频下,偶极子的取向极化滞后,导致介电常数下降,同时介电损耗增加。例如,VHB4910…...
数据库、数据仓库、数据中台、数据湖相关概念
文章目录 序言1数据库,数据仓库,数据中台,数据湖-概念对比释义1.1概念产生的时间顺序1.2在使用功能方面对比1.3在使用工具方面对比 2数据仓库2.1数据仓库的发展阶段2.2 数据仓库的设计2.3数据仓库常用工具,方法2.3.1分析型数据库和…...