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)

相关推荐

  • 累的组词,“累”的偏旁部首是什么

    技术累的组词,“累”的偏旁部首是什么一、累的偏旁部首是糸,结构是上下结构。二、基本字义累léi1、〔累累〕连续成串累的组词;颓丧的样子,如“累累若丧家之犬”。2、〔累赘〕多余,不简洁,如“文字累累”;使人感到多余或麻烦的

    生活 2021年10月26日
  • presto如何安装启动

    技术presto如何安装启动这篇文章主要介绍了presto如何安装启动,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。presto 关键字catalogs

    攻略 2021年11月25日
  • Python中异常处理用法有哪些

    技术Python中异常处理用法有哪些本篇内容主要讲解“Python中异常处理用法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中异常处理用法有哪些”吧!为了

    攻略 2021年11月30日
  • 编写CSS的方法有哪些

    技术编写CSS的方法有哪些这篇文章主要讲解了“编写CSS的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编写CSS的方法有哪些”吧!  CSS正在改变网站设计的

    攻略 2021年12月10日
  • Python解压可迭代对象赋值给多个变量的示例分析

    技术Python解压可迭代对象赋值给多个变量的示例分析今天就跟大家聊聊有关Python解压可迭代对象赋值给多个变量的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年12月4日
  • Java中混淆技术有几种

    技术Java中混淆技术有几种这篇文章给大家分享的是有关Java中混淆技术有几种的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。到目前为止,对于Java程序的保护,混淆技术还是最基本的保护方法。J

    攻略 2021年12月8日