[发明专利]一种避免多线程并发写快照数据乱序的方法有效
| 申请号: | 202110578388.3 | 申请日: | 2021-05-26 |
| 公开(公告)号: | CN113220335B | 公开(公告)日: | 2023-03-14 |
| 发明(设计)人: | 马瑞瑞;何清;王毅 | 申请(专利权)人: | 西安热工研究院有限公司 |
| 主分类号: | G06F8/70 | 分类号: | G06F8/70;G06F5/06 |
| 代理公司: | 西安智大知识产权代理事务所 61215 | 代理人: | 何会侠 |
| 地址: | 710032 陕*** | 国省代码: | 陕西;61 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 避免 多线程 并发 快照 数据 方法 | ||
1.一种避免多线程并发写快照数据乱序的方法,其特征在于,包括以下步骤:
步骤S1:一个写快照伺服线程从先进先出FIFO快照队列缓存中获取快照数据包;
步骤S2:初始化参数、哈希表和信号事件;
步骤S3:获取步骤S1和其他写快照伺服线程中所有出列快照数据,将数据标签ID写入哈希表Key值列,得到哈希表Key值列数据标签;
步骤S4:校验哈希表Key值列数据标签是否存在写入冲突;
步骤S5:如果不存在数据标签写入冲突,则步骤S1中所述写快照伺服线程开始向实时数据库写入快照数据,待写快照结束,清空哈希表转至步骤S1,直至所述快照队列缓存中所有数据全部写入实时数据库;
步骤S6:如果存在数据标签写入冲突,则步骤S1中所述写快照伺服线程开始等待,直至数据标签不存在写入冲突,转至步骤S5;
步骤S2中所述初始化参数、哈希表和信号事件具体如下:
所述初始化参数包括:初始化标签计数器值为0,初始化标签冲突计数器为0;所述标签计数器用于统计标签在不同写快照伺服线程中出现的次数,同一标签在同一写快照伺服线程中仅算1次;所述标签冲突计数器用于记录写快照伺服线程中标签计数器大于1的标签个数;
所述哈希表由两列组成,第一列为Key值,对应于数据标签ID;第二列为标签计数器列,为整形数;
使用CreateEvent函数初始化信号事件,设置信号事件对象为有信号状态;所述信号事件用于标识写快照伺服线程是否能够开始向实时数据库写快照,若信号事件为无信号状态,写快照伺服线程需要等待,若信号事件为有信号状态,写快照伺服线程向实时数据库写数。
2.根据权利要求1所述的一种避免多线程并发写快照数据乱序的方法,其特征在于:步骤S3中所述获取步骤S1和其他写快照伺服线程中所有出列快照数据,将数据标签ID写入哈希表Key值列,重复的数据标签ID在哈希表中只记录一个ID,不重复记录。
3.根据权利要求1所述的一种避免多线程并发写快照数据乱序的方法,其特征在于:步骤S4中所述校验哈希表Key值列数据标签是否存在写入冲突,具体包括以下步骤:
步骤S41:遍历哈希表中所有数据标签ID;
步骤S42:针对每个数据标签ID遍历所有写快照伺服线程的数据包,统计哈希表中所述数据标签ID的标签计数器值:如果写快照伺服线程数据包中存在所述数据标签ID,不论存在几个,哈希表中所述数据标签ID对应的标签计数器值自增1;
步骤S43:如果当前遍历的数据标签ID对应的标签计数器值大于1,则标签冲突计数器值自增1,转到步骤S41;
如果所述标签冲突计数器0,则说明所述哈希表数据标签存在写入冲突;如果所述标签冲突计数器值=0,则说明所述哈希表数据标签不存在写入冲突。
4.根据权利要求1所述的一种避免多线程并发写快照数据乱序的方法,其特征在于:步骤S5中所述如果不存在数据标签写入冲突,则步骤S1中所述写快照伺服线程开始向实时数据库写入快照数据,待写快照结束,转至步骤S1的步骤S5,具体包括:
步骤S51:如果信号事件状态为有信号状态,获取实时数据库连接;
步骤S52:步骤S1中所述写快照伺服线程向实时数据库写入快照数据;
步骤S53:清空哈希表,转到步骤S1。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安热工研究院有限公司,未经西安热工研究院有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110578388.3/1.html,转载请声明来源钻瓜专利网。





