嵌入式技术论坛
直播中

王鑫

7年用户 1136经验值
私信 关注
[问答]

【rtthread学习笔记系列】第三篇:线程间是怎样进行通信的

一、线程间通信

在裸机中使用全局变量进行功能间的通信,rtthread提供了三个工具用于线程间的通信。

邮箱:
消息队列
信号

二、邮箱

2.1 邮箱概念

邮箱中的每一份邮件内容为4字节,在32位系统中刚好为一个指针的大小。rtthread将邮箱抽象成rt_mailbox。


2.2 邮箱api

创建邮箱有动态和静态两种方式: rt_mb_create、rt_mb_init,与之对应的删除邮箱的方式为:rt_mb_delete和rt_mb_detach。在创建邮箱之后,可以使用发送和接收api:rt_mb_send和rt_mb_recv发送和接收邮件,rt_mb_send在邮箱为满时会返回 -RT_EFULL,增强版的rt_mb_send_wait在邮箱满时会挂起等待。


2.3 邮箱示例



三 消息队列

3.1 消息队列概念

消息队列用于发送不固定长度的消息,线程获得的消息是最先进入消息队列的消息。rtthread将消息队列抽象成rt_messagequeue。


3.2 消息队列api


3.3 消息队列示例




四 信号

4.1 信号概念

信号本质是软中断, 用来通知线程发生了异步事件,用做线程之间的异常通知、应急处理。

4.2 信号api


4.3 信号示例

本示例采用软中断的方式处理信号,示例先创建的线程1安装了SIGUSR1信号,当示例发送信号时,线程1执行软中断程序。



更多回帖

发帖
×
20
完善资料,
赚取积分