博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.消息队列的使用
阅读量:4099 次
发布时间:2019-05-25

本文共 1279 字,大约阅读时间需要 4 分钟。

1.邮箱和消息队列的区别:

邮箱发送的是内存地址(指针传递),并没有进行内存赋值,如果邮箱发送缓冲区变成局部变量,如果函数退出之后,这些局部变量就被回收了,发送的东西肯定是不对的,邮箱发送的地址不要放在局部变量中。

消息队列可以直接复制内存块到另外一个内存块,传送的是内存中的内容。

消息队列可以直接用局部变量作为buffer。

邮箱大小固定4字节,消息队列大小不固定,用户自定义,如果定义消息队列大小为4字节,则跟邮箱类似了。

2.邮箱的相关操作API:

        init初始化/creat创建        发送        接收        detach脱离/delete删除

静态消息队列初始化:

rt_mq_init(rt_mq_t     mq,                    const char *name,//消息的名字                    void       *msgpool,//定义好的内存区地址                    rt_size_t   msg_size,//自定义消息的最大字节                    rt_size_t   pool_size,//内存区大小                    rt_uint8_t  flag)//FIFO  |  pariority

动态消息队列创建:

rt_mq_create(const char *name,                     rt_size_t   msg_size,                     rt_size_t   max_msgs,                     rt_uint8_t  flag)

消息队列发送:

rt_mq_send(rt_mq_t mq, void *buffer, rt_size_t size)//一般的消息发送
rt_mq_urgent(rt_mq_t mq, void *buffer, rt_size_t size)//紧急发送,抢占其他消息发送,先发送urgent消息

消息队列接收:

rt_mq_recv(rt_mq_t    mq,                    void      *buffer,                    rt_size_t  size,                    rt_int32_t timeout)

静态消息队列脱离:

rt_mq_detach(rt_mq_t mq)

动态消息队列删除:

rt_mq_delete(rt_mq_t mq)

tips:为什么RTT中的异常返回是负值?

答:个人观点,RTT创始人是linux早起开发者,向linux看齐,如果返回是个负值,肯定出错了,好判断。

消息大小定义为4则消息队列退化为邮箱

4.消息队列的同步问题

        线程1给线程2发送了消息,线程2有没有收到呢?

        解决方法:在线程2中释放信号量(sem)、或者发送邮件(mailbox),在线程1中获取信号量、或者接受邮件。

转载地址:http://wswsi.baihongyu.com/

你可能感兴趣的文章
(python版)《剑指Offer》JZ32:把数组排成最小的数
查看>>
(python版)《剑指Offer》JZ02:替换空格
查看>>
JSP/Servlet——MVC设计模式
查看>>
使用JSTL
查看>>
Java 8新特性:Stream API
查看>>
管理用户状态——Cookie与Session
查看>>
最受欢迎的前端框架Bootstrap 入门
查看>>
JavaScript编程简介:DOM、AJAX与Chrome调试器
查看>>
通过Maven管理项目依赖
查看>>
通过Spring Boot三分钟创建Spring Web项目
查看>>
Spring的IoC(依赖注入)原理
查看>>
Guava快速入门
查看>>
Java编程基础:static的用法
查看>>
Java编程基础:抽象类和接口
查看>>
Java编程基础:异常处理
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
Spring Boot构建简单的微博应用
查看>>
Spring处理表单提交
查看>>
Spring MVC异常处理
查看>>
Leetcode 1180. Count Substrings with Only One Distinct Letter [Python]
查看>>