打印
[活动]

【技术分享】关于一种数组型数据更新的处理方法

[复制链接]
196|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
76290391|  楼主 | 2023-10-27 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@21小跑堂   #申请原创


1 背景介绍以及问题
此方法用于工业数据采集的数据保存, 更新的数据同步方案。
对于工业现场来说,数据型的点位数量多,且更新快,不定序。所以读写比较频繁,实时性要求高一点点。
常用方法就是得到的每一个更新的点位数据,申请空间保存,然后使用先入先出数据结构保存,以及更新到用户层。
此种方案的好处是不缺少任何一个更新的数据,缺点是实时性差一点,如果点位更新的数据比更新数据的任务线程消耗的还快,那点位更新延迟性会越来越高。而且点位的保存地址不固定,会频繁的在堆空间申请释放内存,局部性特性差,性能会很低。

2 解决方法

引入uthash表的头文件,以点位名字为关键字创建hash表,每个hash表的节点的数据字段保存点位数据结构的指针。节点的数据结构里创建更新的标记位,如此方式实现了全部点位空间的申请。
当有点位更新时候,解析所有的点位数据,通过节点名字获取到hash表节点,将点位数据更新到数据字段中,最后修改点位的更新标志位为已更新。
更新的任务线程,定期遍历所有节点,如果标志位为更新状态,则取出所有的数据,然后修改点位为未修改。

此种方案,可解决c语言中最恶心的内存泄漏或者double free 问题,且点位数据最多,也可以轻松应付。可谓省心省力。


使用特权

评论回复

相关帖子

沙发
回忆酱| | 2023-10-30 09:20 | 只看该作者
mcu上 这边也用哈希表方便点 解决比较多问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

74

帖子

1

粉丝