本文分享自中移OneOS公众号《任务间通信》。

上篇讲解了任务间同步,在本篇中主要讲解任务间通信机制,并对邮箱及消息队列进行详细介绍。通过对其概念、详细设计、接口设计等的讲解帮助开发者更好的理解其在操作系统中的应用。

任务间通信是指在不同任务之间传播或交换信息,操作系统实现的通信机制包含邮箱和消息队列。

邮箱

邮箱机制规定,一封邮件是固定的4字节大小,比较适合交换占用较小空间的信息,或者交换指针信息。

发送邮件实际是将发送缓存的4字节内容拷贝到邮箱,接收邮件是将邮箱中的4字节内容拷贝到接收缓存,如下图。

<邮箱通信示意图>

邮箱包含阻塞和非阻塞两种方式,其中,

阻塞方式:

1)如果邮箱为空时选择接收邮件,任务会被挂起,直到有新的邮件进入邮箱,挂起任务被唤醒接收邮件,或者设置的超时时间到达返回错误;

2)如果邮箱已满时选择发送邮件,任务也会被挂起,直到有其他任务接收邮件,邮箱有空间后挂起任务重新进入就绪态发送,或者设置的超时时间到达返回错误。

非阻塞方式:

1)如果邮箱为空时选择接收邮件,或者邮箱已满时选择发送邮件,都是直接返回错误。该方式适用于中断服务、定时器等不能阻塞的场景。

邮箱控制块结构的详细定义如下:

struct os_mailbox
{os_ipc_object_t  parent; os_uint32_t      *msg_pool;            /* 邮箱缓冲区的开始地址*/ os_uint16_t      size;       

任务间通信 | 邮箱、消息队列相关推荐

  1. C++ 九阴真经之线程间通信(消息队列)

    消息队列是线程间通信比较常用得方式,常用于解决经典模型生产者--消费者模型线程间得通信. 本文将结束基于C++标准库实现得消息队列,可以支持任意参数类型,任务参数数量. 为了方便后续线程池.异步队列得 ...

  2. Linux C 进程间的IPC通信 之 消息队列(2)

    Linux C 进程间的IPC通信 之 消息队列 双向通信 代码:(进程1) 1 #include <stdio.h>2 #include <sys/msg.h>3 #incl ...

  3. python笔记 7-8 进程池 进程通信 迭代器 消息队列 Queue 协程 和正则表达式

    day7 进程 进程池 进程通信 迭代器 消息队列 Queue 作用 用于多个进程间的通信 操作put放入消息(值) put_nowait() 放入值,不等待 如果队满,则报错 get获取消息(值) ...

  4. IPC通信:Posix消息队列的属性设置

    IPC通信:Posix消息队列的属性设置 Posix消息队列的属性使用如下结构存放: struct mq_attr { long mq_flags; /*阻塞标志位,0为非阻塞(O_NONBLOCK) ...

  5. python多进程之间的通信:消息队列Queue

    python中进程的通信:消息队列. 我们知道进程是互相独立的,各自运行在自己独立的内存空间. 所以进程之间不共享任何变量. 我们要想进程之间互相通信,传送一些东西怎么办? 需要用到消息队列!! 进程 ...

  6. Linux C 进程间的IPC通信 之 消息队列(1)

    1.消息队列 与 共享内存 1-1 消息队列  和 管道 都属于 队列结构,读完了 就被删除 不存在,但 管道 是 顺序队列 ,而 消息队列 是 链式队列 1-2  消息队列 的读和写 可设为 阻塞模 ...

  7. Linux进程间通讯之消息队列

    首先有个大体的概念:http://www.xefan.com/archives/83703.html 头文件: #include <sys/ipc.h> #include <sys/ ...

  8. (uC/OS-II学习笔记) 消息邮箱消息队列

    原文出处: http://www.cnblogs.com/hebaichuanyeah 与信号量一样,消息邮箱与消息列队都是一种事件块. 消息邮箱可以在任务间实现信息传递. 比如,在任务1中发送一条消 ...

  9. RTX线程通信之——消息队列

    文章目录 Message Queue 消息队列 RTX 消息队列 API 使用案例 小结 参考资料 Message Queue 我们知道,Thread and Event Flags.Semaphor ...

  10. 【Android】线程间通信——Handler消息机制

    文章目录 引言 Java层 永动机跑起来 示例 Looper Handler MessageQueue 永动机停下 Native层 nativeInit() nativePollOnce() nati ...

最新文章

  1. 【算法笔记】莫比乌斯反演(包含定理,两种形式的证明及入门经典模板)
  2. 替换Android系统镜像system.img的方法
  3. 3d触控怎么测试软件,如何检测iPhone 8的3D Touch灵敏度
  4. WindowsServer和普通WIN操作系统有什么不同?
  5. css撑起父元素清除浮动的问题
  6. ubuntu 升级nodejs 和 npm
  7. MySQL使用时遇到的问题
  8. mongodb常用操作命令(待续)
  9. matlab怎么表示对角阵,matlab – 如何基于每一行将矩阵转换为一堆对角矩阵?
  10. cwRsync的安装与配置用法
  11. 也谈谈印度人的职场话题
  12. win7家庭版升级win7旗舰版
  13. 讲师靓照大集合,为最喜爱的讲师投票吧!iOS DevCamp Android DevCamp
  14. openslide read region 出现黑块 解决办法
  15. Python 分析近2000条“数据分析”相关岗位招聘信息
  16. 算法系列之1:计算中国农历(一) .
  17. java计算机毕业设计教务管理系统源程序+mysql+系统+lw文档+远程调试
  18. RFID中的s50卡
  19. 【Android】Android JNI
  20. boj489. 小妹妹去划船

热门文章

  1. Python爬虫:豆瓣电影 TOP 250
  2. 【Matlab电池健康状态预测】BP神经网络锂电池健康状态预测【含源码 688期】
  3. 小学计算机学情分析怎么写,小学英语学情分析范文
  4. python 取出中间字符串
  5. 20200416 T3 寻找天哥【组合向量的模长的幂的期望】
  6. no ST-LINK detected解决方案(ST-LINK驱动安装教程)
  7. 计算机辅助管理试卷和答案,专科《计算机辅助管理》-试卷-答案.doc
  8. android 编译 电脑卡,Android Studio 编译卡慢、卡顿的几种解决方案
  9. Spring Boot 底层自动配置的步骤
  10. 功率放大器在新型全向高阶SH导波压电换能器测试中的应用