C/C++编程-工程实践-通信框架

F103通信框架


要解决的问题:
有一个愚蠢的问题,write发布消息,read读取消息。然而read读取的消息:

  • 不能是全局变量。
  • 有优先级
  • 不能丢失数据,被覆盖
  • 最好不加锁
write
adapter
read1
read2
read3
  1. 发布订阅者模式
    write 发布一个指针 ,由订阅者读取指针指向内容。
    但,如果发布后,订阅者线程优先级较低,有较大延迟才会实际read。然而,发布者早已有发布新信息。这样会造成read不及时,而丢失信息。
    所以此模式,需要read尽快读取并处理。
    a. 为了尽快read处理,所以都是用回调方式运行read。
    b. 为了read也区分紧急处理,一般处理,所以回调函数的指针,存储到队列里,优先级越高的回调,越排位靠前。
    d. 为了解决消息瞬时拥挤。考虑增加write发布指针时,有message_buffer[1024],有publish 的消息(指针)的topic_buffer[10]。
    c. 如果优先级较低的read处理不过来,write就又刷新了消息。则确实是处理不过来。

  2. 不加锁串行queue
    | none | msg1_head | msg1_data | msg1_end | msg2_head | msg2_data | msg2_end | msg2_head | msg2_data | msg2_end | msg_urgent_head | msg_urgent_data | msg_urgent_end |

  3. 不加锁并行queue

    source
    queue1
    queue2
    queue3

    如果queue push的copy_message, 则就这样。
    如果queue push的share_ptr,则需要reader_count.

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值