CN116401081B - 数据共享方法 - Google Patents
数据共享方法 Download PDFInfo
- Publication number
- CN116401081B CN116401081B CN202310677712.6A CN202310677712A CN116401081B CN 116401081 B CN116401081 B CN 116401081B CN 202310677712 A CN202310677712 A CN 202310677712A CN 116401081 B CN116401081 B CN 116401081B
- Authority
- CN
- China
- Prior art keywords
- shared memory
- shared
- data
- determining
- registration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000006870 function Effects 0.000 claims description 21
- 230000005055 memory storage Effects 0.000 claims description 11
- 238000004891 communication Methods 0.000 description 12
- 230000005540 biological transmission Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000008447 perception Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种数据共享方法,包括:接收到共享内存注册信息,调用共享内存注册接口;根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存;确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存。本公开提高了不同模块间的数据共享的效率,增强了共享数据的安全性。
Description
技术领域
本公开涉及数据处理领域,尤其涉及一种数据共享方法。
背景技术
自动驾驶***软件是车辆实现自动驾驶功能的主要应用程序,一般自动驾驶***软件分为感知模块,决策规划模块,控制模块,不同模块之间需要信息共享,如感知模块需要告诉决策规划模块车辆周围的障碍物信息,决策规划模块需要告诉控制模块规划路径等。
当前数据共享时,存在数据传输效率低、安全性差等问题,造成数据泄露、数据共享不全面及数据读取不及时等。
有鉴于此,如何提高不同模块间的数据共享的效率,提高共享数据的安全性,成为了一个重要的研究问题。
发明内容
有鉴于此,本公开的目的在于提出一种数据共享方法,用以解决或部分解决上述问题。
基于上述目的,本公开的第一方面提供了一种数据共享方法,所述方法包括:
接收到共享内存注册信息,调用共享内存注册接口;
根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存;
确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;
接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存。
基于同一发明构思,本公开的第二方面提出了一种数据共享装置,包括:
注册信息接收模块,被配置为接收到共享内存注册信息,调用共享内存注册接口;
共享内存注册模块,被配置为根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存;
指针标签保存模块,被配置为确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;
共享数据写入模块,被配置为接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存。
基于同一发明构思,本公开的第三方面提出了一种电子设备,包括存储器、处理器及存储在所述存储器上并可由所述处理器执行的计算机程序,所述处理器在执行所述计算机程序时实现如上所述的数据共享方法。
基于同一发明构思,本公开的第四方面提出了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行如上所述的数据共享方法。
从上述可以看出,本公开提出了一种数据共享方法,在接受到共享内存注册指令后注册共享内存,并生成共享内存指针标签,后续将共享数据写入所述共享内存时,通过所述共享内存指针标签确定对应的共享内存,使得共享数据的写入位置更加准确,保证了共享内存的唯一性。调用写入数据流程,将共享数据写入根据共享内存指针标签确定的共享内存,实现了数据的共享。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例的数据共享方法的流程图;
图2为本公开实施例的共享内存的示意图;
图3为本公开另一应用场景下的实施例的流程图;
图4为本公开另一应用场景下的实施例的流程图;
图5为本公开另一应用场景下的实施例的流程图;
图6为本公开另一应用场景下的实施例的流程图;
图7为本公开实施例的数据共享装置的结构框图;
图8为本公开实施例的电子设备的结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开涉及的名词解释如下:
Protobuf:Protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化),用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
基于上述描述,本实施例提出了一种数据共享方法,可以应用于车辆及终端设备,优选为具备自动驾驶功能的车辆,所述具备自动驾驶功能的车辆优选为包括自动驾驶***软件的车辆,如图1所示,所述方法包括:
步骤101,接收到共享内存注册信息,调用共享内存注册接口。
具体实施时,当需要将数据进行共享时,调用用户接口模块中的共享内存注册接口。接收到的共享内存注册信息包括下列至少之一:共享内存名字、共享内存需要存储的信息包的大小、共享内存需要存储的数据字节的大小及共享内存底层实现模式。
步骤102,根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存。
具体实施时,根据上述步骤调用的共享内存注册接口,根据所述共享内存注册信息注册共享内存,以供后续数据共享时保存共享数据。
步骤103,确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中。
具体实施时,在注册共享内存后,判断所述共享内存是否注册成功。当所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签并保存至数据库中,后续写入数据时仅需调用所述共享内存指针标签即可获取到对应的共享内存。因共享内存指针标签与共享内存存在一一对应关系,因此保证了共享内存的唯一性。
步骤104,接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存。
具体实施时,所述待写入的共享数据采用protobuf进行定义,根据共享内存指针标签确定与所述共享内存指针标签对应的共享内存,将接收到的共享数据写入所述共享内存中。通过上述方案,当增加需要共享的数据时,只需要更新对应的protobuf 文件即可,不需要更新其他任何信息,方便随着真实的开发进度的进行随时更新数据。
通过上述方案,在接受到共享内存注册指令后注册共享内存,并生成共享内存指针标签,后续将共享数据写入所述共享内存时,通过所述共享内存指针标签确定对应的共享内存,使得共享数据的写入位置更加准确,保证了共享内存的唯一性。调用写入数据流程,将共享数据写入根据共享内存指针标签确定的共享内存,实现了数据的共享。
在一些实施例中,步骤102具体包括:
步骤1021,判断所述共享内存的底层实现模式,控制共享内存读写接口根据所述底层实现模式确定对应的共享内存中间件接口。
具体实施时,获取共享内存注册信息中的共享内存底层实现模式,所述底层实现模式包括下列至少之一:读模式或写模式。调用共享内存读写接口,控制所述共享内存读写接口根据所述底层实现模式确定对应的共享内存中间件接口。
步骤1022,将所述共享内存注册信息通过所述对应的共享内存中间件接口发送至共享内存底层单元,并记录第一共享内存标签,将所述第一共享内存标签保存至数据库。
具体实施时,所述共享内存读写接口收到共享内存注册信息后,将所述共享内存注册信息发送至对应的共享内存中间件接口。利用所述共享内存中间件接口将所述共享内存注册信息发送至共享内存底层单元,以供后续所述共享内存底层单元接收所述共享内存注册信息后注册共享内存。将所述共享内存中间件接口将所述共享内存注册信息发送至共享内存底层单元之后,记录第一共享内存标签并保存至数据库中。
步骤1023,利用所述共享内存底层单元根据所述共享内存注册信息注册共享内存。
具体实施时,共享内存底层单元接收到所述共享内存注册信息后,根据所述共享内存注册信息注册共享内存。
通过上述方案,分别调用车辆内部包含的共享内存读写接口、共享内存中间件接口及共享内存底层单元,根据接收到的共享内存注册信息注册所述共享内存,以供后续利用所述共享内存实现数据的共享。
在一些实施例中,步骤1023之前还包括:
判断所述底层实现模式,确定所述底层实现模式为读模式,置位共享内存初始化完成标签;或者,
确定所述底层实现模式为写模式,注册所述共享内存及与所述共享内存对应的第一共享内存指针。
具体实施时,首先对共享内存底层实现模式进行判断,当所述模式为写模式时,首先注册第一共享内存指针,再注册所述共享内存。所述第一共享内存指针用于存储注册共享内存的基本信息,所述基本信息包括下列至少之一:第一共享内存指针的注册时间、共享内存指针键值、共享内存的字节长度及预留信息。其中所述共享内存指针键值包括下列至少之一:共享内存键值及第一共享内存指针的注册时间。
在一些实施例中,确定所述底层实现模式为写模式,步骤1023具体包括:
步骤10231,判断第一共享内存指针是否存在,其中所述第一共享内存指针为与所述共享内存对应的指针。
步骤10232,当所述第一共享内存指针不存在,创建所述第一共享内存指针,基于所述第一共享内存指针注册所述共享内存;或者,
当所述第一共享内存指针存在,确定存在已注册的共享内存,更新所述已注册的共享内存的注册时间。
具体实施时,判断数据库中是否已经存在有第一共享内存指针,若已存在第一共享内存指针,则更新所述第一共享内存指针对应的共享内存的注册时间。
若不存在第一共享内存指针,则创建第一共享内存指针,并获取所述共享内存注册信息中的共享内存名字,以所述第一共享内存指针对应的注册时间及所述共享内存名字为关键字注册共享内存。注册完成后将所述注册的共享内存关联到共享内存段。
在一些实施例中,步骤10232具体包括:
步骤102321,判断所述底层实现模式;
步骤102322,确定所述底层实现模式为读模式,置位共享内存初始化完成标签;或者,
确定所述底层实现模式为写模式,根据所述共享内存注册信息注册所述共享内存,其中所述共享内存中包括下列至少之一:共享内存基本信息、存储信息包及共享内存存储区域。
具体实施时,再次判断底层实现模式,以保证数据共享的准确性。当再次判断为写模式时,调用创建接口,根据共享内存注册信息注册所述共享内存,其中所述共享内存的大小为共享内存基本信息的大小、存储信息包的大小与共享内存存储区域的大小之和,所述存储信息包的大小为存储信息包的数量与信息包包头大小之积。
在一些实施例中,步骤103具体包括:
步骤1031,将所述共享内存注册信息写入所述共享内存的共享内存基本信息位置,其中所述共享内存注册信息包括注册信息包的数量。
具体实施时,向所述共享内存的共享内存基本信息位置写入所述共享内存注册信息,并将其他基本信息写入所述共享内存基本信息位置,其中所述其他基本信息包括下列至少之一:注册信息包数量、共享内存的大小、第一信息包的位置、下一信息包的位置及信息是否上锁。所述共享内存的基本存储信息如图2所示。
步骤1032,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中。
步骤1033,对所述注册成功的共享内存进行标记,得到第二共享内存标签。
步骤1034,将所述第二共享内存标签发送至所述共享内存读写接口,以供所述共享内存读写接口接收所述第二共享内存标签后,根据所述第二共享内存标签生成第三共享内存标签;
步骤1035,获取所述共享内存的注册时间,将所述共享内存注册时间、所述第二共享内存标签、所述第三共享内存标签、所述第一共享内存指针及所述底层实现模式保存至数据库中与所述共享内存指针标签对应的位置。
具体实施时,在所述共享内存成功创建之后,记录所述第二共享内存标签、第一共享内存指针、共享内存注册时间、底层实现模式,共享内存读写接口接收所述共享内存底层单元发送的第二共享内存标签后,记录为第三共享内存标签。将所述共享内存注册时间、所述第二共享内存标签、所述第三共享内存标签、所述第一共享内存指针及所述底层实现模式保存至数据库中与所述共享内存指针标签对应的位置,方便后续通过所述共享内存指针标签调取对应的数据,如第三共享内存标签等。
在一些实施例中,所述方法还包括:
当所述共享内存存在,确定所述共享内存注册失败,将所述共享内存关联至共享内存段;
判断所述共享内存是否关联成功;
确定所述共享内存关联失败,重新注册所述共享内存及与所述共享内存对应的第一共享内存指针。
具体实施时,当所述共享内存已存在时,所述共享内存注册失败,需将所述共享内存关联至共享内存段中,并判断是否关联成功。关联成功则继续进行写数据流程,关联失败则重新创建所述共享内存及与所述共享内存对应的第一共享内存指针。
在一些实施例中,步骤104具体包括:
步骤1041,根据所述共享内存指针标签将所述共享数据发送至所述共享内存中间件接口。
步骤1042,判断所述共享内存指针标签对应的第三共享内存标签是否存在。
具体实施时,当所述共享内存中间件接口收到所述共享数据后,控制所述共享内存中间件接口判断所述共享内存指针标签对应的第三共享内存标签是否存在。
步骤1043,确定所述第三共享内存标签存在,向所述共享内存底层单元发送写入指令,控制所述共享内存底层单元将所述共享数据写入共享内存;或者,
确定所述第三共享内存标签不存在,发送第一提示信息,其中所述第一提示信息为提示所述共享内存指针标签错误的信息。
具体实施时,当所述第三共享内存标签存在时,调用所述共享内存底层单元将所述共享数据写入所述共享内存。
当所述第三共享内存标签不存在时,提示共享内存标签错误,并退出写入数据流程。通过上述方案,通过共享内存标签确定对应的共享内存,所述共享内存即所述待写入的共享数据的写入位置,使得所述写入位置更加准确。
在一些实施例中,在步骤1043控制所述共享内存底层单元将所述共享数据写入共享内存之前,还包括:
步骤104A,获取所述共享内存的底层实现模式,对所述底层实现模式进行判断。
步骤104B,确定所述底层实现模式为写模式,对所述共享内存进行核验处理。
具体实施时,判断与共享内存指针标签对应的共享内存的底层实现模式,当所述底层实现模式为写模式,则对所述共享内存进行检查;当所述底层实现模式为读模式,则直接退出。
步骤104C,确定所述共享内存满足预设条件,将所述共享数据写入所述共享内存,其中所述预设条件为所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,及所述共享内存关联到共享内存段。
具体实施时,判断所述第一共享内存指针的注册时间与所述数据库中的共享内存注册时间是否相等、及所述共享内存是否关联到共享内存段。当所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,同时所述共享内存关联到共享内存段时,将所述共享数据写入所述共享内存。
当所述第一共享内存指针的注册时间与所述数据库中的共享内存注册时间不相等,和/或所述共享内存未关联到共享内存段,退出写数据流程。
在一些实施例中,步骤104C确定所述共享内存满足预设条件之后,还包括:
获取所述共享数据的长度及所述共享内存存储区域的长度;
确定所述共享数据的长度小于或等于所述共享内存存储区域的长度,将所述共享数据写入所述共享内存;或者,
确定所述共享数据的长度大于所述共享内存存储区域的长度,拒绝写入所述共享内存。
具体实施时,分别获取所述待写入的共享数据的长度及所述共享内存存储区域的长度。当所述共享数据长度小于或等于所述共享内存存储区域长度时,将所述共享内存写入所述共享内存。
当所述共享内存数据长度大于所述共享内存存储区域长度时,所述共享内存存储区域不够存储所述共享数据,因此拒绝写入所述共享数据。之后判断所述共享数据长度是否大于预设长度阈值;
确定所述共享数据长度大于所述预设长度阈值,发送第二提示信息,其中所述第二提示信息为提示共享数据过长的信息;或者,
确定所述共享数据长度小于或等于预设长度阈值,重新注册所述共享内存,其中所述重新注册的共享内存的存储区域长度大于或等于所述共享数据长度。
通过上述方案,通过根据共享数据是否超出设定阈值重新注册共享内存指针和共享内存,提高模块之间的数据传输的安全性和速率。
在一些实施例中,步骤1043具体包括:
步骤10431,确定所述共享内存关联到共享内存段,将所述共享内存进行锁定处理。
具体实施时,再次判断所述共享内存是否关联到所述共享内存段,当所述共享内存关联到所述共享内存段时,对所述共享内存进行锁定处理,避免在写入过程中,所述共享内存再次被读取或写入。
步骤10432,获取所述共享内存中的共享内存基本信息地址及共享内存存储区域地址,根据所述共享内存基本信息地址确定所述共享内存中的第一信息包序号及下一信息包序号。
具体实施时,如图2所示,获取所述共享内存中的共享内存基本信息地址,所述共享内存基本信息地址对应的区域内存储有第一信息包序号及下一信息包序号。
步骤10433,根据所述第一信息包序号及下一信息包序号,计算得到所述共享内存中包含的初始信息包的个数。
具体实施时,示例性的,所述第一信息包序号为2,所述下一信息包序号为5,则所述共享内存中包含的初始信息包的个数为4个。
步骤10434,根据所述初始信息包的个数确定所述共享数据的写入位置,将所述共享数据写入所述共享内存的写入位置。
具体实施时,通过所述初始信息包的个数确定所述共享数据的写入位置,避免出现因初始信息包个数过多或所述共享数据写入混乱,导致的所述共享数据读取不准确的问题。
在一些实施例中,步骤10434具体包括:
步骤104341,确定所述初始信息包个数为零,确定所述共享内存的存储区域为所述共享数据的写入位置;
具体实施时,当所述初始信息包个数为零个,确定所述共享内存的存储区域为所述共享数据的写入位置,直接向所述共享内存存储区域内写入共享数据,同时向存储信息包位置写入所述共享数据的接收时间,共享数据的起始字节及共享数据的数据长度,其中所述起始字节在数据存储区域第一个位置记为0,此后依次递增。当所述共享数据写入完成,下一信息包序号更新,并解锁所述共享内存。或者,
步骤104342,确定所述初始信息包个数不为零,且所述初始信息包个数小于所述注册信息包的数量,根据初始信息包个数与注册信息包的数量确定剩余存储区域长度,通过所述剩余存储区域长度确定所述共享数据的写入位置;
具体实施时,当所述初始信息包数量不为零且所述初始信息包小于所述注册信息包的数量,则需计算剩余存储区域的长度,根据所述剩余区域长度确定所述共享数据的写入位置,以保证所述共享数据能完整的写入所述共享内存。或者,
步骤104343,确定所述初始信息包个数大于或等于所述注册信息包数量,判断所述注册信息包的数量是否为零;确定所述注册信息包的数量不为零,移动所述初始信息包,得到第一剩余存储区域,将所述第一剩余存储区域作为所述共享数据的写入位置。
具体实施时,当所述初始信息包个数大于或等于所述注册信息包数量,进一步判定所述注册信息包的数量是否为0,当所述注册信息包的数量为0,则重新注册共享内存,以存放所述共享数据;当所述注册信息包数量不为0,移动所述初始信息包,其中示例性的,所述移动的初始信息包的数量为所述注册信息包数量的三分之一并向下取整,得到第一剩余存储区域,将所述第一剩余存储区域作为所述共享数据的写入位置。
在一些实施例中,步骤104342具体包括:
确定所述共享数据长度小于或等于所述剩余存储区域长度,第二剩余存储区域为所述共享数据的写入位置,其中所述第二剩余存储区域的长度等于所述剩余存储区域长度;或者,
确定所述共享数据长度大于所述剩余存储区域长度,移动所述初始信息包,得到第三剩余存储区域,将所述第三剩余存储区域作为所述共享数据的写入位置。
具体实施时,判断所述共享数据长度及所述剩余存储区域长度的大小关系,当所述共享数据长度小于或等于所述剩余存储区域长度时,剩余存储区域即为所述共享数据的写入位置;
当所述共享数据长度大于所述剩余存储区域长度,移动所述初始信息包,示例性的,所述需要移动的初始信息包的数量为注册信息包的数量的二分之一并向下取整,得到第三剩余存储区域,将所述第三剩余存储区域作为所述共享数据的写入位置。
通过上述方案,通过判定剩余的信息包数量,剩余的存储数据区域大小,提高模块之间的数据传输的安全性和速率,当剩余空间不足时通过数据移动的方式,扩展剩余空间,而不是盲目覆盖,保证了存储数据的连续性,防止数据遗漏。
在一些实施例中,所述移动所述初始信息包的具体过程,包括:
步骤A01,判断需要移动的信息包的个数是否大于初始信息包的个数;
步骤A02,确定所述需要移动的信息包的个数大于或等于所述初始信息包的个数,确定所有所述初始信息包为所述需要移动的信息包,更新所述第一信息包序号;或者,
确定所述需要移动的信息包的个数小于所述初始信息包的个数,计算所述需要移动的信息包的总长度,将所述初始信息包中除需要移动的信息包外的所有信息包的序号更新。
具体实施时,当所述需要移动的信息包的个数大于或等于所述初始信息包的个数,则所述需要移动的信息包为全部初始信息包,将所述第一信息包序号加全部初始信息包个数,得到新第一信息包序号。从共享内存存储区域的起始位置开始写入数据。
示例性的,所述需要移动的信息包的个数为nRemove,所述第一信息包序号为mFirst,所述初始信息包的个数为npac,则当nRemove大于或等于npac时,所述新第一信息包序号为mFirst+npac。
当所述需要移动的信息包的个数小于所述初始信息包的个数,计算需要移动的信息包的长度,所述需要移动的数据包的长度为每一个需要移动的信息包的长度之和。将所述初始信息包中除需要移动的信息包外的每一信息包对应的字节起始位置更新,其中所述更新后的字节起始位置为原起始位置减需要移动的信息包的长度。将所述初始信息包前移至所述共享内存存储区域的起始位置,更新所述第一信息包序号,得到新第一信息包序号。
示例性的,所述需要移动的信息包的个数为nRemove,所述第一信息包序号为mFirst,所述初始信息包的个数为npac,则当nRemove小于npac时,所述新第一信息包序号为mFirst+nRemove。
在一些实施例中,所述方法还包括:
步骤10a,接收到读取指令,判断所述共享内存的底层实现模式。
具体实施时,接收到读取指令后,首先对共享内存底层实现模式进行判断。当所述底层实现模式为写模式时,直接退出。
步骤10b,确定所述底层实现模式为读模式,控制所述共享内存底层单元根据所述第一共享内存标签读取所述共享内存中的共享数据。
具体实施时,当所述底层实现模式为读模式时,将所述共享内存锁定,避免在读取过程中,所述共享内存再次被写入导致读取数据不准确或失败。所述共享内存被写入通过第一共享内存标签实时监听所述共享内存中的数据,实现共享数据的读取。
步骤10c,获取所述共享数据的长度,将所述共享数据及所述共享数据的长度发送至预先构建的回调函数,以供用户通过所述回调函数获取所述共享数据。
具体实施时,获取预先构建的回调函数,其中所述回调函数为根据数据用途设计的共享数据处理函数。获取读取的所述共享数据的长度,将所述共享数据及所述共享数据的长度传给回调函数,以供用户使用。
通过上述方案,读取数据时通过第一共享内存标签实现共享数据的读取,所述共享数据的读取更加准确,同时将读取到的共享数据发送至回调函数,保证了接收数据的实时更新,方便用户使用。
在一些实施例中,步骤10b具体包括:
步骤10b1,获取所述共享内存底层单元的读取位置及所述共享内存中下一信息包序号,将所述共享内存中下一信息包序号作为所述共享数据的索引值。
步骤10b2,判断所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等,及所述共享内存是否关联到共享内存段;
具体实施时,判断所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等,及所述共享内存是否关联到共享内存段,若所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间不相等,和/或所述共享内存未关联到共享内存段,新建了共享内存,重新读取数据。
通过上述方案,以下一信息包为读取数据的位置,同时以共享内存是否关联到实际的共享内存段为参数,保证在共享内存更新后及时读取最新的数据,同时防止写数据模块突然写入一帧数据,保证数据读写的连续性,和读取数据的及时性。
步骤10b3,确定所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,及所述共享内存关联到共享内存段,获取所述共享内存中的第一信息包序号。
步骤10b4,确定所述索引值大小与所述下一信息包序号相等,停止读取所述共享数据;或者,
确定所述索引值大小不在所述第一信息包序号与所述下一信息包序号之间,确定所述读取位置错误,重新获取所述共享内存底层单元的读取位置;或者,
所述索引值大小与所述下一信息包序号不相等,且所述索引值大小在所述第一信息包序号与所述下一信息包序号之间,读取所述索引值对应的数据作为共享数据。
具体实施时,示例性的所述索引值大小为index,所述第一信息包序号为mfirst,所述下一信息包序号为mNext;
当index不在mfirst及mNext之间时,确定所述读取位置错误,重新获取读取位置;
当index与mNext相等时,停止读取共享数据;
当index与mNext不相等且index在mfirst及mNext之间,读取index 对应的数据包的数据,至此一包数据读取完成。
通过上述方案,通过判定当前读数据的位置是否和共享内存中mNext的值相等,作为读数据的条件之一,防止共享内存中的数据长时间没有写入数据后一直读取最后一包数据,也可以防止共享内存中就一包数据时读取数据,提高数据传输效率和数据安全性。
使用共享内存传递信息时,信息发送模块调用共享内存注册模块指定共享内存名字,共享内存buf大小,数据包的个数,即可完成共享内存注册。需要共享数据时,只需要调用写数据流程直接完成数据向共享内存的发送。
信息接收模块注册同名的接收数据内存并绑定数据处理回调函数,实时监听数据,当共享内存中有数据更新时,直接读出数据。
共享内存写数据模块可以根据写入数据的大小重新注册共享内存,或者如果共享内存没有注册,直接注册之后再写入数据 ,保证了数据传输的完整性,安全性,同时实现一个模块写入数据,多个模块接收数据功能。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,本公开在另一应用场景下的实施例如图3所示,包括:
步骤301,接收共享内存注册信息。
具体实施时,当需要将数据进行共享时,接收共享内存注册信息,所述共享内存注册信息包括下列至少之一:共享内存名字、共享内存需要存储的信息包的大小、共享内存需要存储的数据字节的大小及共享内存底层实现模式。
步骤302,判断所述共享内存底层实现模式是否为写模式。
具体实施时,获取共享内存注册信息中的共享内存底层实现模式,所述底层实现模式包括下列至少之一:读模式或写模式。
步骤3031,确定所述底层实现模式为写模式,创建第一共享内存指针;
或者,步骤3032,确定所述底层实现模式为读模式,置位共享内存初始化完成标签。
步骤304,判断第一共享内存指针是否创建成功,其中所述第一共享内存指针为与所述共享内存对应的指针。
步骤3051,当所述第一共享内存指针创建成功,判断所述底层实现模式。
或者,步骤3052,当所述第一共享内存指针创建失败,直接退出。
具体实施时,判断第一共享内存指针是否创建成功,即所述数据库中是否已经包含有第一共享内存指针,若已存在第一共享内存指针,则更新所述第一共享内存指针对应的共享内存的注册时间,退出注册。
若不存在第一共享内存指针,则创建第一共享内存指针,并获取所述共享内存注册信息中的共享内存名字。
步骤3061,确定底层实现模式为写模式,以所述第一共享内存指针对应的注册时间及所述共享内存名字为关键字注册共享内存。注册完成后将所述注册的共享内存关联到共享内存段。或者,
步骤3062,确定底层实现模式为读模式,置位共享内存初始化完成标签。
具体实施时,判断为写模式时,调用创建接口,根据共享内存注册信息注册所述共享内存,其中所述共享内存的大小为共享内存基本信息的大小、存储信息包的大小与共享内存存储区域的大小之和,所述存储信息包的大小为存储信息包的数量与信息包包头大小之积。
步骤307,将所述共享内存注册信息写入所述共享内存的共享内存基本信息位置。
具体实施时,保存所述共享内存的基本信息,用于对后续写入数据及读取数据进行判定。
步骤308,共享内存注册完成,置位共享内存关联成功标志位。
基于同一发明构思,本公开在另一应用场景下的实施例如图4所示,包括:
步骤401,接收待写入的共享数据。
步骤402,获取所述共享内存的底层实现模式,对所述底层实现模式进行判断。
步骤4031,确定所述底层实现模式为写模式,判断所述第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等。或者,
步骤4032,确定所述底层实现模式为读模式,直接退出。
具体实施时,判断与共享内存指针标签对应的共享内存的底层实现模式,当所述底层实现模式为写模式,则对所述共享内存进行检查;当所述底层实现模式为读模式,则直接退出。
步骤4041,确定所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,判断所述共享内存是否关联到共享内存段;或者,
步骤4042,确定所述第一共享内存指针的注册时间与数据库中共享内存注册时间不相等,共享内存标志位复位。
步骤4051,所述共享内存已关联到共享内存段,获取所述共享数据的长度及所述共享内存存储区域的长度。或者,
步骤4052,所述共享内存未关联到共享内存段,直接退出。
具体实施时,判断所述第一共享内存指针的注册时间与所述数据库中的共享内存注册时间是否相等、及所述共享内存是否关联到共享内存段。当所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,同时所述共享内存关联到共享内存段时,将所述共享数据写入所述共享内存。
步骤406,判断所述共享数据的长度及所述共享内存存储区域的长度的大小关系。
步骤4071,确定所述共享数据的长度小于或等于所述共享内存存储区域的长度,锁定所述共享内存,将所述共享数据写入所述共享内存。或者,
步骤4072,确定所述共享数据的长度大于所述共享内存存储区域的长度,判断所述共享数据长度是否大于预设长度阈值。
具体实施时,分别获取所述待写入的共享数据的长度及所述共享内存存储区域的长度。当所述共享数据长度小于或等于所述共享内存存储区域长度时,将所述共享内存写入所述共享内存。
当所述共享内存数据长度大于所述共享内存存储区域长度时,所述共享内存存储区域不够存储所述共享数据,因此拒绝写入所述共享数据。
步骤4081,确定所述共享数据长度大于所述预设长度阈值,发送第二提示信息,其中所述第二提示信息为提示共享数据过长的信息,退出。或者,
步骤4082,确定所述共享数据长度小于或等于预设长度阈值,重新注册所述共享内存,其中所述重新注册的共享内存的存储区域长度大于或等于所述共享数据长度。
基于同一发明构思,本公开在另一应用场景下的实施例如图5所示,包括:
步骤501,锁定共享内存,将所述共享数据写入所述共享内存。
具体实施时,对所述共享内存进行锁定处理,避免在写入过程中,所述共享内存再次被读取或写入。
步骤502,获取所述共享内存中的共享内存基本信息地址及共享内存存储区域地址。
具体实施时,获取所述共享内存中的共享内存基本信息地址,所述共享内存基本信息地址对应的区域内存储有第一信息包序号及下一信息包序号。
步骤503,根据所述第一信息包序号及下一信息包序号,计算得到所述共享内存中包含的初始信息包的个数,根据所述初始信息包的个数确定所述共享数据的写入位置。
具体实施时,通过所述初始信息包的个数确定所述共享数据的写入位置,避免出现因初始信息包个数过多或所述共享数据写入混乱,导致的所述共享数据读取不准确的问题。
步骤5031,确定所述初始信息包个数为零,确定所述共享内存的存储区域为所述共享数据的写入位置。
具体实施时,当所述初始信息包个数为零个,确定所述共享内存的存储区域为所述共享数据的写入位置,直接向所述共享内存存储区域内写入共享数据,同时向存储信息包位置写入所述共享数据的接收时间,共享数据的起始字节及共享数据的数据长度,其中所述起始字节在数据存储区域第一个位置记为0,此后依次递增。当所述共享数据写入完成,下一信息包序号更新,并解锁所述共享内存。或者,
步骤5032,确定所述初始信息包个数不为零,且所述初始信息包个数小于所述注册信息包的数量,根据初始信息包个数与注册信息包的数量确定剩余存储区域长度,通过所述剩余存储区域长度确定所述共享数据的写入位置。
具体实施时,当所述初始信息包数量不为零且所述初始信息包小于所述注册信息包的数量,则需计算剩余存储区域的长度,根据所述剩余区域长度确定所述共享数据的写入位置,以保证所述共享数据能完整的写入所述共享内存。或者,
步骤5033,确定所述初始信息包个数大于或等于所述注册信息包数量,判断所述注册信息包的数量是否为零。
在一些实施例中,步骤5032具体包括:
步骤50321,确定所述共享数据长度小于或等于所述剩余存储区域长度,第二剩余存储区域为所述共享数据的写入位置,其中所述第二剩余存储区域的长度等于所述剩余存储区域长度;或者,
步骤50322,确定所述共享数据长度大于所述剩余存储区域长度,移动所述初始信息包,得到第三剩余存储区域,将所述第三剩余存储区域作为所述共享数据的写入位置。
具体实施时,判断所述共享数据长度及所述剩余存储区域长度的大小关系,当所述共享数据长度小于或等于所述剩余存储区域长度时,剩余存储区域即为所述共享数据的写入位置;
当所述共享数据长度大于所述剩余存储区域长度,移动所述初始信息包,示例性的,所述需要移动的初始信息包的数量为注册信息包的数量的二分之一并向下取整,得到第三剩余存储区域,将所述第三剩余存储区域作为所述共享数据的写入位置。
在一些实施例中,步骤5033具体包括:
步骤50331,确定所述注册信息包的数量不为零,移动所述初始信息包,得到第一剩余存储区域,将所述第一剩余存储区域作为所述共享数据的写入位置。或者,
步骤50332,确定所述注册信息包的数量为零,重新注册共享内存。
具体实施时,当所述初始信息包个数大于或等于所述注册信息包数量,进一步判定所述注册信息包的数量是否为0,当所述注册信息包的数量为0,则重新注册共享内存,以存放所述共享数据;当所述注册信息包数量不为0,移动所述初始信息包,其中示例性的,所述移动的初始信息包的数量为所述注册信息包数量的三分之一并向下取整,得到第一剩余存储区域,将所述第一剩余存储区域作为所述共享数据的写入位置。
步骤504,解锁所述共享内存,数据写入完成。
基于同一发明构思,本公开在另一应用场景下的实施例如图6所示,包括:
步骤601,获取所述共享内存底层单元的读取位置及所述共享内存中下一信息包序号,将所述共享内存中下一信息包序号作为所述共享数据的索引值。
步骤602,判断所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等,及所述共享内存是否关联到共享内存段。
步骤6021,确定所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间相等,且所述共享内存关联到共享内存段,对所述共享内存上锁。或者,
步骤6022,确定所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间不相等,和/或所述共享内存未关联到共享内存段,重新读取。
具体实施时,判断所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等,及所述共享内存是否关联到共享内存段,若所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间不相等,和/或所述共享内存未关联到共享内存段,新建了共享内存,重新读取数据。
通过上述方案,以下一信息包为读取数据的位置,同时以共享内存是否关联到实际的共享内存段为参数,保证在共享内存更新后及时读取最新的数据,同时防止写数据模块突然写入一帧数据,保证数据读写的连续性,和读取数据的及时性。
步骤603,获取所述共享内存中的第一信息包序号,比较所述第一信息包序号、下一信息包序号及所述索引值的大小。
步骤6031,确定所述第一信息包序号大于或等于所述下一信息包序号,重新读取。或者,
步骤6032,确定所述第一信息包序号小于所述下一信息包序号,判断所述索引值大小是否在所述第一信息包序号与所述下一信息包序号之间。
步骤6041,确定所述索引值大小不在所述第一信息包序号与所述下一信息包序号之间,确定所述读取位置错误,重新获取所述共享内存底层单元的读取位置。或者,
步骤6042,确定所述索引值大小在所述第一信息包序号与所述下一信息包序号之间,判断所述索引值是否等于所述下一信息包序号。
步骤6051,所述索引值大小与所述下一信息包序号不相等,且所述索引值大小在所述第一信息包序号与所述下一信息包序号之间,读取所述索引值对应的数据作为共享数据。
步骤6052,确定所述索引值大小与所述下一信息包序号相等,所述共享内存中不存在数据更新,等待更新后读取数据。
通过上述方案,通过判定当前读数据的位置是否和共享内存中mNext的值相等,作为读数据的条件之一,防止共享内存中的数据长时间没有写入数据后一直读取最后一包数据,也可以防止共享内存中就一包数据时读取数据,提高数据传输效率和数据安全性。
步骤606,解锁所述共享内存。
步骤607,获取所述共享数据的长度,将所述共享数据及所述共享数据的长度发送至预先构建的回调函数,以供用户通过所述回调函数获取所述共享数据。
具体实施时,获取预先构建的回调函数,其中所述回调函数为根据数据用途设计的共享数据处理函数。获取读取的所述共享数据的长度,将所述共享数据及所述共享数据的长度传给回调函数,以供用户使用。
通过上述方案,读取数据时通过第一共享内存标签实现共享数据的读取,所述共享数据的读取更加准确,同时将读取到的共享数据发送至回调函数,保证了接收数据的实时更新,方便用户使用。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种数据共享装置。
参考图7,图7为实施例的数据共享装置,包括:
注册信息接收模块701,被配置为接收到共享内存注册信息,调用共享内存注册接口;
共享内存注册模块702,被配置为根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存;
指针标签保存模块703,被配置为确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;
共享数据写入模块704,被配置为接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的数据共享方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的数据共享方法。
图8示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图, 该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的数据共享方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的数据共享方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的数据共享方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (9)
1.一种数据共享方法,其特征在于,包括:
接收到共享内存注册信息,调用共享内存注册接口;
根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存;
确定所述共享内存注册成功,生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;
接收待写入的共享数据,根据所述共享内存指针标签将所述共享数据写入所述共享内存;
所述根据所述共享内存注册信息基于所述共享内存注册接口注册共享内存,包括:
判断所述共享内存的底层实现模式,控制共享内存读写接口根据所述底层实现模式确定对应的共享内存中间件接口;
将所述共享内存注册信息通过所述对应的共享内存中间件接口发送至共享内存底层单元,并记录第一共享内存标签,将所述第一共享内存标签保存至数据库;
利用所述共享内存底层单元根据所述共享内存注册信息注册共享内存。
2.根据权利要求1所述的方法,其特征在于,确定所述底层实现模式为写模式,所述利用所述共享内存底层单元根据所述共享内存注册信息注册共享内存,包括:
判断第一共享内存指针是否存在,其中所述第一共享内存指针为与所述共享内存对应的指针;
当所述第一共享内存指针不存在,创建所述第一共享内存指针,基于所述第一共享内存指针注册所述共享内存;或者,
当所述第一共享内存指针存在,确定存在已注册的共享内存,更新所述已注册的共享内存的注册时间。
3.根据权利要求2所述的方法,其特征在于,所述生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中,包括:
将所述共享内存注册信息写入所述共享内存的共享内存基本信息位置,其中所述共享内存注册信息包括注册信息包的数量;
生成与所述共享内存对应的共享内存指针标签,将所述共享内存指针标签保存至数据库中;
对所述注册成功的共享内存进行标记,得到第二共享内存标签;
将所述第二共享内存标签发送至所述共享内存读写接口,以供所述共享内存读写接口接收所述第二共享内存标签后,根据所述第二共享内存标签生成第三共享内存标签;
获取所述共享内存的注册时间,将所述共享内存注册时间、所述第二共享内存标签、所述第三共享内存标签、所述第一共享内存指针及所述底层实现模式保存至数据库中与所述共享内存指针标签对应的位置。
4.根据权利要求3所述的方法,其特征在于,所述根据所述共享内存指针标签将所述共享数据写入所述共享内存,包括:
根据所述共享内存指针标签将所述共享数据发送至所述共享内存中间件接口;
判断所述共享内存指针标签对应的第三共享内存标签是否存在;
确定所述第三共享内存标签存在,向所述共享内存底层单元发送写入指令,控制所述共享内存底层单元将所述共享数据写入共享内存;或者,
确定所述第三共享内存标签不存在,发送第一提示信息,其中所述第一提示信息为提示所述共享内存指针标签错误的信息。
5.根据权利要求4所述的方法,其特征在于,所述控制所述共享内存底层单元将所述共享数据写入共享内存,包括:
确定所述共享内存关联到共享内存段,将所述共享内存进行锁定处理;
获取所述共享内存中的共享内存基本信息地址及共享内存存储区域地址,根据所述共享内存基本信息地址确定所述共享内存中的第一信息包序号及下一信息包序号;
根据所述第一信息包序号及下一信息包序号,计算得到所述共享内存中包含的初始信息包的个数;
根据所述初始信息包的个数确定所述共享数据的写入位置,将所述共享数据写入所述共享内存的写入位置。
6.根据权利要求5所述的方法,其特征在于,所述根据所述初始信息包的个数确定所述共享数据的写入位置,包括:
确定所述初始信息包个数为零,确定所述共享内存的存储区域为所述共享数据的写入位置;或者,
确定所述初始信息包个数不为零,且所述初始信息包个数小于所述注册信息包的数量,根据初始信息包个数与注册信息包的数量确定剩余存储区域长度,通过所述剩余存储区域长度确定所述共享数据的写入位置;或者,
确定所述初始信息包个数大于或等于所述注册信息包数量,判断所述注册信息包的数量是否为零;确定所述注册信息包的数量不为零,移动所述初始信息包,得到第一剩余存储区域,将所述第一剩余存储区域作为所述共享数据的写入位置。
7.根据权利要求6所述的方法,其特征在于,所述通过所述剩余存储区域长度确定所述共享数据的写入位置,包括:
确定所述共享数据长度小于或等于所述剩余存储区域长度,第二剩余存储区域为所述共享数据的写入位置,其中所述第二剩余存储区域的长度等于所述剩余存储区域长度;或者,
确定所述共享数据长度大于所述剩余存储区域长度,移动所述初始信息包,得到第三剩余存储区域,将所述第三剩余存储区域作为所述共享数据的写入位置。
8.根据权利要求1所述的方法,其特征在于,还包括:
接收到读取指令,判断所述共享内存的底层实现模式;
确定所述底层实现模式为读模式,控制所述共享内存底层单元根据所述第一共享内存标签读取所述共享内存中的共享数据;
获取所述共享数据的长度,将所述共享数据及所述共享数据的长度发送至预先构建的回调函数,以供用户通过所述回调函数获取所述共享数据。
9.根据权利要求8所述的方法,其特征在于,所述控制所述共享内存底层单元根据所述第一共享内存标签读取所述共享内存中的共享数据,包括:
获取所述共享内存底层单元的读取位置及所述共享内存中下一信息包序号,将所述下一信息包序号作为所述共享数据的索引值;
判断所述共享内存中第一共享内存指针的注册时间与数据库中共享内存注册时间是否相等,及所述共享内存是否关联到共享内存段;
确定所述第一共享内存指针的注册时间与数据库中共享内存注册时间相等,及所述共享内存关联到共享内存段,获取所述共享内存中的第一信息包序号;
确定所述索引值大小与所述下一信息包序号相等,停止读取所述共享数据;或者,
确定所述索引值大小不在所述第一信息包序号与所述下一信息包序号之间,确定所述读取位置错误,重新获取所述共享内存底层单元的读取位置;或者,
所述索引值大小与所述下一信息包序号不相等,且所述索引值大小在所述第一信息包序号与所述下一信息包序号之间,读取所述索引值对应的数据作为共享数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310677712.6A CN116401081B (zh) | 2023-06-09 | 2023-06-09 | 数据共享方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310677712.6A CN116401081B (zh) | 2023-06-09 | 2023-06-09 | 数据共享方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116401081A CN116401081A (zh) | 2023-07-07 |
CN116401081B true CN116401081B (zh) | 2023-09-01 |
Family
ID=87020247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310677712.6A Active CN116401081B (zh) | 2023-06-09 | 2023-06-09 | 数据共享方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116401081B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作***的共享内存管理方法和装置 |
CN106681651A (zh) * | 2016-05-05 | 2017-05-17 | 安徽南瑞继远电网技术有限公司 | 一种两级缓冲机制的日志管理***设计方法 |
CN110932998A (zh) * | 2019-11-28 | 2020-03-27 | 杭州迪普科技股份有限公司 | 报文处理方法和装置 |
CN111158927A (zh) * | 2019-12-17 | 2020-05-15 | 科大讯飞股份有限公司 | 进程间通信方法、装置及存储介质 |
CN113391791A (zh) * | 2020-03-12 | 2021-09-14 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置及存储介质 |
CN114327946A (zh) * | 2021-12-24 | 2022-04-12 | 北京百度网讯科技有限公司 | 共享内存访问控制方法、装置、电子设备及自动驾驶车辆 |
CN114490141A (zh) * | 2022-04-14 | 2022-05-13 | 中国电子科技集团公司第二十八研究所 | 一种基于共享内存的高并发ipc数据交互方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11093400B2 (en) * | 2019-10-15 | 2021-08-17 | Sling Media Pvt. Ltd. | Lock-free sharing of live-recorded circular buffer resources |
-
2023
- 2023-06-09 CN CN202310677712.6A patent/CN116401081B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681651A (zh) * | 2016-05-05 | 2017-05-17 | 安徽南瑞继远电网技术有限公司 | 一种两级缓冲机制的日志管理***设计方法 |
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作***的共享内存管理方法和装置 |
CN110932998A (zh) * | 2019-11-28 | 2020-03-27 | 杭州迪普科技股份有限公司 | 报文处理方法和装置 |
CN111158927A (zh) * | 2019-12-17 | 2020-05-15 | 科大讯飞股份有限公司 | 进程间通信方法、装置及存储介质 |
CN113391791A (zh) * | 2020-03-12 | 2021-09-14 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置及存储介质 |
CN114327946A (zh) * | 2021-12-24 | 2022-04-12 | 北京百度网讯科技有限公司 | 共享内存访问控制方法、装置、电子设备及自动驾驶车辆 |
CN114490141A (zh) * | 2022-04-14 | 2022-05-13 | 中国电子科技集团公司第二十八研究所 | 一种基于共享内存的高并发ipc数据交互方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116401081A (zh) | 2023-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107861832B (zh) | 数据验证方法、装置及可读存储介质 | |
CN112486946A (zh) | 一种版本确认方法、***、电子设备及存储介质 | |
CN110673986A (zh) | 内存操作的异常捕获方法、装置、终端及存储介质 | |
US20190347211A1 (en) | System and method for managing memory for large keys and values | |
CN111506580A (zh) | 一种基于中心化块链式账本的交易存储方法 | |
CN116401081B (zh) | 数据共享方法 | |
CN114528126A (zh) | 业务处理方法及装置 | |
CN112363762B (zh) | 一种融合命令处理方法、***、设备以及介质 | |
CN108920563B (zh) | 一种数据库切换方法及装置 | |
CN110908882A (zh) | 一种应用程序的性能分析方法、装置、终端设备及介质 | |
WO2022111691A1 (zh) | Nfc标签的校验方法和相关设备 | |
CN109491648B (zh) | 嵌入式软件中库函数独立分区的实现方法和***以及设备 | |
CN112437079A (zh) | 一种内网访问方法及装置 | |
CN113177014A (zh) | 基于检验方式的串口通讯方法和串口芯片 | |
CN117215995B (zh) | 远程直接内存访问方法、分布式存储***及电子设备 | |
CN105989021A (zh) | 一种文件处理方法和装置 | |
CN110874466A (zh) | 车辆用户数据的安全查看方法、***、终端、及车辆 | |
CN115460272B (zh) | 电视机的用户代理配置方法、***、设备及可读存储介质 | |
CN112528514B (zh) | 一种高精度亚像素星斑重塑方法及装置 | |
KR20090059509A (ko) | 관심지점의 콘텐츠를 제공하기 위한 네비게이션장치 및 그제공방법 | |
CN116709241A (zh) | 蓝牙传感器的标识方法、装置、蓝牙***及车辆 | |
US20230365176A1 (en) | Dynamic parameter calculation method based on ctc simulation training procedure and apparatus thereof | |
CN118409915A (zh) | Can校验和脚本自动生成方法、装置、设备及存储介质 | |
CN114968810A (zh) | 一种测试用例格式转换方法及装置 | |
CN116361320A (zh) | 信息存取方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |