rt-thread创建线程后怎么运作(rt-thread线程挂起不成功)

技术RT-Thread线程间通信学习过程是怎样的今天就跟大家聊聊有关RT-Thread线程间通信学习过程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。下面

今天跟大家聊聊RT-Thread线程间通信的学习过程,可能很多人都不太了解。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。

以下是与RT-Thread多线程相关的最后一个重要知识的总结:线程间通信。前一篇文章多次提到,一个大任务分成几个小任务,这些小任务之间必然存在各种关系,导致这些小任务的线程无法各行其是,必须考虑其他任务线程的运行情况。

既然有了线程间同步,多个线程就可以相互通信了,那为什么还需要线程间通信呢?线程间通信到底是什么?这种方法有哪些应用场景?边肖试图从以下几个方面总结RT-Thread线程间通信的学习过程。

RT-Thread线程间通信学习过程是怎样的

线程间通信的相关概念

什么是线程间通信?沟通,顾名思义,就是双方都需要沟通和交谈。一般来说,线程A在工作过程中会有一些数据或信息,这样线程B在收到数据或信息后就可以继续完成指定的任务和工作。

为什么两个线程要通信?同样,多个任务线程不是独立的。当他们工作时,他们需要根据业务场景相互沟通。或者以音乐播放器为例。当歌词阅读线程从硬盘中读出歌词时,需要将这串歌词告诉显示线程,让它显示歌词。这个“讲”的动作是通过线程间的通信来实现的。

2.png

既然都是为了协调线程的工作状态而设计的,那么线程间同步和线程间通信有什么区别呢?不同的是线程间同步能做的事情太有限了。线程间的同步只是告诉对方“不要跑太快,等我~”,而线程间的通信则意味着有大量的数据和信息要告诉对方。万一线程A对线程B有很多话要说,线程同步的方法不能满足要求,需要线程间的通信。

RT-Thread线程间通信学习过程是怎样的

当邮箱正在使用时,它可能是空的或满的。当邮箱为空时,接收邮件的线程会选择挂机等待,或者等待超时。当邮箱满了,发送邮件的线程会选择挂起或者直接返回一个满邮箱的返回值。

系统内核提供了如下与邮箱相关的API函数接口,如下图所示。

RT-Thread线程间通信学习过程是怎样的

当线程A想要发送消息时,首先从空闲消息块链表中取出一块空间,将消息加载到其中后,将消息块挂到非空消息块链表的尾部。如果在紧急模式下发送消息,消息块将链接到非空消息链表的队列头。当一个线程得到一条消息时,它总是在链表的头部得到这条消息。

系统内核提供了如下与消息队列相关的API函数接口,如下图所示。

RT-Thread线程间通信学习过程是怎样的

系统内核提供了以下与信号相关的API函数接口,如下图所示。

RT-Thread线程间通信学习过程是怎样的

线程间通信的注意事项

在多线程通信过程中,邮箱、消息队列、信号这三种线程间通信方式有一些注意事项:

1.使用email进行线程间通信时,由于一封email最多只能有4个字节的长度,如果想要传输更多的数据信息,可以使用结构体封装信息,通过指针进行传输。

2.邮件传递是无阻塞的,因此可以应用于中断服务程序。但是邮件接收被阻止,可以设置接收超时的时间,在中断服务程序中不能使用邮件接收。

3.当邮箱中没有邮件并且超时时间不为0时,邮件接收过程将自动被阻止。当邮箱已满时,发送线程可以选择暂停等待,也可以在邮箱已满时直接返回错误代码。

4.消息队列是一种异步通信方式,消息队列中的消息始终遵循先进先出的原则。

5.您可以在线程或中断服务程序中向消息队列发送消息,但不能在中断服务程序中接收消息。

6.紧急消息可以发送到消息队列。紧急消息将被放在消息队列的链表的头部,并首先被等待的线程获取。

7.信号不同于信号量,两者的概念不能混淆。信号是软件级的软中断模式。

8.线程不会通过阻塞来等待信号,因为线程本身不知道信号(软中断)什么时候会到达。

9.默认情况下,信号的线程处理可以设置为捕获信号、忽略信号和处理信号。

看完以上,你对RT-Thread线程间通信的学习过程有了更好的了解吗?如果您想了解更多知识或相关内容,请关注行业资讯频道,感谢您的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150150.html

(0)

相关推荐

  • 鼠标指针怎么换,Cursosr怎么换鼠标指

    技术鼠标指针怎么换,Cursosr怎么换鼠标指打开控制面板,双击“鼠标”,选择“指针”选项卡鼠标指针怎么换。可以更改方案,或者选中下面的某一状态,点击“浏览”,选择一个鼠标图片即可。
    但所有的鼠标的图片格式都是.cur的

    生活 2021年10月30日
  • 中国标志性建筑,中国著名建筑有哪些?急急急

    技术中国标志性建筑,中国著名建筑有哪些?急急急北京故宫是中国明清两代的皇家宫殿,旧称为紫禁城,位于北京中轴线的中心,是中国古代宫廷建筑之精华。北京故宫以三大殿为中心,占地面积72万平方米,建筑面积约15万平方米,有大小宫

    生活 2021年10月27日
  • redis中RedissonLock如何实现等待锁

    技术redis中RedissonLock如何实现等待锁今天就跟大家聊聊有关redis中RedissonLock如何实现等待锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年11月11日
  • Spring中接口注入的三种方式分别是什么

    技术Spring中接口注入的三种方式分别是什么本篇文章为大家展示了Spring中接口注入的三种方式分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring中 接口注入

    攻略 2021年10月27日
  • 手打虾滑,现在比较有特色的火锅有哪些

    技术手打虾滑,现在比较有特色的火锅有哪些如今的火锅店是越来越多,品种也越来越多了,想吃火锅了,再也不单单是在铜锅涮肉和川味火锅中选择了,日本的寿喜锅,韩国的部队火锅,潮汕牛肉火锅,港式小火锅,梭边鱼火锅,贵州的酸汤鱼火锅

    生活 2021年10月30日
  • 如何使用MySQL自动化运维工具goinception

    技术如何使用MySQL自动化运维工具goinception这篇文章主要讲解了“如何使用MySQL自动化运维工具goinception”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究

    攻略 2021年10月22日