邮箱和消息队列的使用疑惑

2020-2-24 23:31 [复制链接] 9 449

各位大佬,一个线程需要发送固定大小的数据给多个线程,我打算采用消息队列的通信方式。问题来了:  g: n0 Z0 d4 R' d
1,消息队列上的第一个消息如果被第一个线程读走了,那么其它线程还能读到第一个消息吗?
, c  ^  e! ^& R/ V+ a2,这种情况适合用消息队列还是邮箱呢?或者其他更好的通信方式?9 v7 d. x7 o1 D. I- n
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2020-2-25 20:55:51 | 显示全部楼层
有人了解吗
" g" I  C: H9 D. X9 z4 j; a
使用道具 举报 回复
发表于 2020-2-26 10:24:34 | 显示全部楼层
1、只要一个线程读到了,消息就会被删除,另一个线程就读不到了
- z( F- Q, {$ M$ U) I/ g+ d- ?2、可以使用多个消息队列,发送的时候,每个消息队列都发送
使用道具 举报 回复
发表于 2020-2-26 15:48:10 | 显示全部楼层
haov000 发表于 2020-2-26 10:24
) V. m& A2 I! c7 `7 l  a$ M1、只要一个线程读到了,消息就会被删除,另一个线程就读不到了
7 Z2 _. g, `! j$ G2、可以使用多个消息队列,发送的时候,每 ...
. j3 H9 @$ ^8 c% F' R) m$ T1 R$ E
确定吗,这样通信效率很低。开多个消息队列的话开销很大
使用道具 举报 回复
发表于 2020-3-12 08:34:25 | 显示全部楼层
当有多个消息发送到消息队列时,通常将先进入消息队列的消息先传给线程,也就是说,线程先得到的是最先进入消息队列的消息,即先进先出原则 (FIFO)。   消息被接收后就在列表中删除了。) C4 m/ C% C$ [% h  b+ {
*可以考虑用共享内存的方式
使用道具 举报 回复
发表于 2020-3-28 11:43:29 | 显示全部楼层
小半仙 发表于 2020-3-12 08:34+ k: I( m& J+ L) t( j- ?6 Y, U
当有多个消息发送到消息队列时,通常将先进入消息队列的消息先传给线程,也就是说,线程先得到的是最先进入 ...
6 }3 l- s% b) w3 m, O( B5 J% U
rtt支持共享内存的通信方式吗?有案例吗
使用道具 举报 回复
发表于 2020-3-29 22:21:49 | 显示全部楼层
一对多, rtt目前应该是没有直接的解决方案的, 要自己搞, 除了共享内存,还可以看看观察者模式或者发布订阅模式
使用道具 举报 回复
发表于 2020-3-30 08:11:57 | 显示全部楼层
LLD1252310732 发表于 2020-3-28 11:43
0 K( g9 [, j, Irtt支持共享内存的通信方式吗?有案例吗

. n4 m( N' s7 H  _你可以看一下邮箱的使用示例,推荐的就是采用邮箱发送共享内存的地址,效率高,速度快
使用道具 举报 回复
发表于 2020-5-13 10:02:48 | 显示全部楼层
小半仙 发表于 2020-3-30 08:11
( w# k$ r5 k7 i# |! j5 s: d你可以看一下邮箱的使用示例,推荐的就是采用邮箱发送共享内存的地址,效率高,速度快 ...
* R: S8 D/ t# o: ]( `! Y
假设邮箱发送的是共享内存的地址,那么如果地址里的内容改变了,最后读取的邮件后得到该地址的值不也就改变了么, 这样会不会存在一些问题。
使用道具 举报 回复
发表于 2020-5-13 14:31:40 | 显示全部楼层
青衫烟雨客 发表于 2020-5-13 10:02. f( Q. E$ N, P) U
假设邮箱发送的是共享内存的地址,那么如果地址里的内容改变了,最后读取的邮件后得到该地址的值不也就改 ...
1 c0 K2 R2 ~) d0 k/ V% G
每一封邮件中发送的共享内存地址都是malloc的,接收端接收邮件后就free了,不会有第三方去操作内存,  这种用法需要考虑内存碎片化的问题。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 32 主题
  2. 273 帖子
  3. 273 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表