码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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(); /* 退出临界区 */
    
    • 1
    • 2
    • 3

    线程运行机制

    线程具有独立的栈空间, 当进行线程切换时, 会将当前线程的上下文存在栈中, 当线程要恢复运行时, 再从栈中读取上下文信息, 进行恢复。线程栈还用来存放函数中的局部变量。

    线程的五种状态

    在这里插入图片描述
    在这里插入图片描述

    动态和静态创建线程区别

    动态创建线程是在运行时才动态创建线程的控制块和堆栈空间
    静态创建线程是在编译时就将线程的控制块和堆栈空间预分配好,然后再初始化启动;

    动态和静态创建线程优缺点

    1. 动态创建线程优点
      对于非固定的线程(运行过程可以销毁,短暂使用的线程),灵活分配线程内存

    2. 静态创建线程优点
      对于固定线程,不会产生动态内存分配,确保线程创建成功
      创建速度快,用于确认线程的项目可提前发现内存是否不足

    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)                  //线程调度的时间片大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建成功,返回线程句柄;创建失败,返回RT_NULL

    动态删除线程

    rt_err_t rt_thread_delete(rt_thread_t thread); 
    
    • 1

    删除线程成功,返回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)            //线程调度的时间片大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    线程其他操作

    线程启动

    rt_err_t rt_thread_startup(rt_thread_t thread);
    
    • 1

    线程延时

    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 为单位
    
    • 1
    • 2
    • 3

    获得当前执行的线程句柄

    rt_thread_t rt_thread_self(void);
    
    • 1
  • 相关阅读:
    以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!
    关于c++中和java中 集合添加元素的区别
    【牛客-剑指offer-数据结构篇】【图解】JZ76 删除链表中重复的结点 两种思路 Java实现
    Docker(镜像、容器、仓库)工具安装使用命令行选项及构建、共享和运行容器化应用程序
    Vue 之 解决v-html生成的元素不能触发@click等vue事件和CSS样式不生效的方法
    牛客网语法篇练习复合类型(一)
    PHP将pdf转为图片后用OCR识别
    微信小程序echart导出图片
    CPU飙高问题排查命令
    2023年软件测试常见面试题
  • 原文地址:https://blog.csdn.net/qq_31441951/article/details/133896293
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号