RT-Thread 线程间同步

这篇具有很好参考价值的文章主要介绍了RT-Thread 线程间同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多个执行单元(线程、中断)同时执行临界区,操作临界资源,会导致竟态产生。

RTT使用信号量、互斥量、事件集来解决这种问题。

同步(按顺序)、互斥(排它)。

信号量

信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的。

每个信号量对象都有一个信号量值和一个线程等待队列,信号量的值对应了信号量对象的实例数目、资源数目,假如信号量值为5,则表示共有5个信号量实例可以被使用当信号量实例数目为零时,再申请该信号量的线程就会被挂起在该信号量的等待队列上,等待可用的信号量实例。

struct rt_semaphore
{
    struct rt_ipc_object parent;                        /**< inherit from ipc_object */

    rt_uint16_t          value;                         /**< value of semaphore. */
    rt_uint16_t          reserved;                      /**< reserved field */
};

动态创建:rt_sem_create();
系统不再使用信号量时,可以通过删除信号量以释放系统资源,适用于动态创建的信号量。调用这个函数时,系统将删除这个信号量。如果删除该信号量时,有线程正在等待该信号量,那么删除操作会先唤醒等待在该信号量上的线程(等待线程的返回值是-RT_ERROR),然后再释放信号量的内存资源。

静态创建的时候,定义一个结构体变量,而不是结构体指针,系统会为它分配空间。

信号量的使用

获取信号量:
线程通过获取信号量来获得信号量资源实例,当信号量值大于0时,线程将获得信号量,并且相应的信号量值会减1,如果信号量的值等于0,那么说明当前信号量资源实例不可用,申请该信号量的线程将根据time参数的情况选择直接返回、或挂起等待一段时间、或永久等待,直到其它线程或中断释放该信号量。如果在参数time指定的时间内依然得不到信号量,线程将超时返回,返回值是-RT ETIMEOUT。

rt_sem_take();
rt_sem_release();

互斥量

互斥量体现的是排他性,类似于特殊的信号量——二值信号量
区别:信号量可以由不同的线程释放,互斥量只能由同一线程释放。

RT-Thread 线程间同步,RT-Thread,RT-Thread,学习

事件集

事件集是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多,多对多的线程间同步。

一个线程和多个事件的关系可设置为:
其中任意一个事件唤醒线程,或几个事件都到达后唤醒线程,多个事件集合可以用一个32bit无符号整形变量来表示,变量的每一位代表一个时间,线程通过“逻辑与”或“逻辑或”将一个或多个事件关联起来,形成事件组合。

  • 事件只与线程相关,事件间相互独立。
  • 事件仅用于同步,不提供数据传输功能。
  • 事件无排队性,即多次向线程发送同一事件(如果线程还未来得及读走),其效果等同于只发送一次。

RT-Thread 线程间同步,RT-Thread,RT-Thread,学习
RT-Thread 线程间同步,RT-Thread,RT-Thread,学习文章来源地址https://www.toymoban.com/news/detail-676811.html

到了这里,关于RT-Thread 线程间同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RT-Thread入门笔记5-线程的时间片轮询调度

    优先级和时间片是线程的两个重要参数,优先级描述了线程竞争处理器资源的能力。 优先级和时间片 优先级 RT-Thread 最大支持 256 个优先级(数值越小的优先级越高,0 为最高优先级, 最低优先级预留给空闲线程);用户可以通过rt_config.h中的RT_THREAD_PRIORITY_MAX宏来修改最大支持

    2024年02月02日
    浏览(34)
  • RT-Thread(学习)

    RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过16个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作

    2024年02月07日
    浏览(31)
  • 【STM32&RT-Thread零基础入门】 6. 线程创建应用(线程挂起与恢复)

    硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 在上一个任务中,通过停止命令把线程删除后,线程在系统中就不存在了,也无法再使线程重新运行。例如输入stop_led_thread命令后,led停止闪烁,但也无法重新开启LED灯闪烁

    2024年02月11日
    浏览(25)
  • 【STM32&RT-Thread零基础入门】 5. 线程创建应用(线程创建、删除、初始化、脱离、启动、睡眠)

    硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 本章主要讲线程的工作机制和管理方法,通过实例讲解如何使用多线程完成多任务开发。 RT-Thread用线程控制块来描述和管理一个线程,一个线程对应一个线程控制块。线程控

    2024年02月12日
    浏览(43)
  • RT-Thread 中断管理学习(一)

    什么是中断?简单的解释就是系统正在处理某一个正常事件,忽然被另一个需要马上处理的紧急事件打断,系统转而处理这个紧急事件,待处理完毕,再恢复运行刚才被打断的事件。生活中,我们经常会遇到这样的场景: 当你正在专心看书的时候,忽然来了一个电话,于是记

    2024年02月10日
    浏览(37)
  • RT-Thread 中断管理学习(二)

    RTT不对中断服务程序所需要的处理时间做任何假设、限制,但如图其它实时操作系统或非实时操作系统一样,用户需要保证所有的中断服务程序在尽可能短的时间内完成(中断服务程序在系统中相当于拥有最高的优先级,会抢占所有线程优先执行)。这样在发生中断嵌套,或

    2024年02月10日
    浏览(40)
  • RT-Thread HWTIMER设备(学习)

    硬件定时器一般有2种工作模式,定时器模式和计数器模式。不管是工作在哪一种模式,实质都是通过内部计数器模块对脉冲信号进行计数,下面是定时器的一些重要概念。 计数器模式:对外部输入引脚的外部脉冲信号计数。 定时器模式:对内部脉冲信号计数。定时器常用作

    2024年02月07日
    浏览(27)
  • RT-Thread Studio学习(十四)ADC

    本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用ADC设备。硬件及开发环境如下: OS WIN10 STM32F407VET6 STM32CubeMX v6.10.0 STM32Cube MCU Package for STM32F4 Series v1.28.0 RT-Thread Studio v2.2.7 RT-Thread Source Code v5.0.2 STM32F4 chip support packages v0.2.3 打开RT-Thread Studio软件新建基于芯片的项

    2024年01月19日
    浏览(32)
  • RT-Thread学习(一)简介及基础环境配置

    之前学习了FreeRTOS,但是一直想深入学习,但是没有人指导,又不知道该如何学习,于是再学习一个操作系统看看情况。 RT-Thread是一个物联网操作系统,几乎支持所有主流的MCU和Wi-Fi芯片,实时多线程操作系统,主要用在32位的MCU上面。物联网(Internet Of Things,IoT),RT-Threa

    2024年01月17日
    浏览(26)
  • 嵌入式MCU学习利器-03-在线做RT-Thread实验

    很多学生想要学习RT-Thread,但是苦于没有好的学习工具或者物理开发板而选择放弃。现在福利来了,同学们可以基于我们的仿真平台做嵌入式demo,通过调试功能深入学习RT-Thread的原理。本仿真平台基于STM32F103ZE芯片上线了一套RT-Thread课程,逐步深入讲解FreeRTOS。 本文章以第一节

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包