CN115437798A - 共享内存的数据处理方法、装置、设备和介质 - Google Patents
共享内存的数据处理方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN115437798A CN115437798A CN202110699208.7A CN202110699208A CN115437798A CN 115437798 A CN115437798 A CN 115437798A CN 202110699208 A CN202110699208 A CN 202110699208A CN 115437798 A CN115437798 A CN 115437798A
- Authority
- CN
- China
- Prior art keywords
- data
- storage block
- index value
- target
- write
- 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.)
- Pending
Links
Images
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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
-
- 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
Abstract
本公开涉及一种共享内存的数据处理方法、装置、设备和介质;其中,该方法包括:接收目标数据的写入操作请求,写入操作请求用于请求将目标数据写入共享内存;获取共享内存中的写入索引值,并更新写入索引值,更新后的写入索引值比更新前的写入索引值大1,写入索引值用于锁定待写入数据的存储块;确定更新后的写入索引值对应的存储块为目标存储块;将目标数据写入目标存储块中。本公开实施例能够有效实现共享内存中多数据的同时写入。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种共享内存的数据处理方法、装置、设备和介质。
背景技术
车辆控制系统基于面向服务的架构(Service-Oriented Architecture,SOA),将应用程序的不同功能服务(如后台控制服务、日志记录服务)进行拆分,服务之间通过接口和协议进行通信,因此,服务间需要一套可靠、高效的通信机制,来满足数据分发的需求。
数据分发服务(Data Distribution Service,DDS)可用于数据分发,即,数据发布者可向共享内存中的某主题中写入消息(Message),订阅该主题的数据订阅者都可以从共享内存中读取到该消息。在现有的数据写入时,数据发布者需要锁定共享内存来进行数据写入的操作,待所有数据写入完成后,下一个数据发布者则可继续在共享内存中进行写入数据。
从而,难以实现多个数据发布者同时在共享内存中写入数据。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种共享内存的数据处理方法、装置、设备和介质。
第一方面,本公开提供了一种共享内存的数据处理方法,包括:
接收目标数据的写入操作请求,所述写入操作请求用于请求将所述目标数据写入共享内存;
获取所述共享内存中的写入索引值,并更新所述写入索引值,更新后的写入索引值比更新前的写入索引值大1,所述写入索引值用于锁定待写入数据的存储块;
确定更新后的写入索引值对应的存储块为目标存储块;
将所述目标数据写入所述目标存储块中。
可选的,所述方法还包括:
接收目标用户设备的读取操作请求,所述读取操作请求用于请求读取所述共享内存中第一存储块的数据;
检测到第一存储块对应的状态为第一状态,则读取所述第一存储块中的数据,其中,所述第一状态用于指示所述第一存储块中已完成写入数据;
在所述第一存储块中的数据读取完成之后,根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,所述数据读取消息用于指示所述第一存储块的读取结果。
可选的,所述根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,包括:
检测到所述第一存储块对应的状态为第一状态,则向所述目标用户设备发送第一数据读取消息,所述第一数据读取消息中包括所述第一存储块中的数据;
或者,检测到所述第一存储块对应状态为第二状态,则向所述目标用户设备发送第二数据读取消息,所述第二数据读取消息用于指示所述第一存储块中的数据读取失败;
其中,所述第二状态用于指示所述第一存储块中正在写入数据。
可选的,所述将所述目标数据写入所述目标存储块中之前,所述方法还包括:
将所述目标存储块对应的状态设置为第二状态;
将所述目标数据写入所述目标存储块中之后,还包括:
将所述目标存储块对应的状态设置为第一状态。
可选的,所述将所述目标存储块对应的状态设置为第一状态之后,所述方法还包括:
更新所述共享内存中的存储索引值,更新后的存储索引值比更新前的存储索引值大1,所述存储索引值用于指示所述共享内存中已完成写入数据的存储块。
可选的,所述确定第一存储块对应的状态为第一状态之前,还包括:
获取所述目标用户设备对应的读取索引值,其中,所述读取索引值用于指示所述目标用户设备从所述共享内存中已经完成读取数据的存储块;
确定所述存储索引值大于所述读取索引值。
可选的,所述向所述目标用户设备发送第一数据读取消息之后,所述方法还包括:
向所述目标用户设备发送读取索引值的更新消息,所述更新消息用于指示所述目标用户设备更新所述读取索引值,所述更新后的读取索引值比更新前的读取索引值大1。
可选的,所述方法还包括:
向目标用户设备发送数据读取消息,所述数据读取消息用于指示所述目标用户设备从所述共享内存中读取数据。
可选的,所述将所述目标数据写入所述目标存储块中,包括:
确定所述目标存储块为所述共享内存中的首个存储块,且所述首个存储块中已存储数据,则将所述目标数据替换存储至所述首个存储块中。
第二方面,本公开提供了一种共享内存的数据处理装置,包括:
接收模块,用于接收目标数据的写入操作请求,所述写入操作请求用于请求将所述目标数据写入共享内存;
获取模块,用于获取所述共享内存中的写入索引值,并更新所述写入索引值,更新后的写入索引值比更新前的写入索引值大1,所述写入索引值用于锁定待写入数据的存储块;
确定模块,用于确定更新后的写入索引值对应的存储块为目标存储块;
写入模块,用于将所述目标数据写入所述目标存储块中。
可选的,还包括:读取模块和发送模块;
接收模块,还用于接收目标用户设备的读取操作请求,所述读取操作请求用于请求读取所述共享内存中第一存储块的数据;
读取模块,用于检测到第一存储块对应的状态为第一状态,则读取所述第一存储块中的数据,其中,所述第一状态用于指示所述第一存储块中已完成写入数据;
发送模块,用于在所述第一存储块中的数据读取完成之后,根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,所述数据读取消息用于指示所述第一存储块的读取结果。
可选的,发送模块,具体用于:
检测到所述第一存储块对应的状态为第一状态,则向所述目标用户设备发送第一数据读取消息,所述第一数据读取消息中包括所述第一存储块中的数据;
或者,检测到所述第一存储块对应状态为第二状态,则向所述目标用户设备发送第二数据读取消息,所述第二数据读取消息用于指示所述第一存储块中的数据读取失败;
其中,所述第二状态用于指示所述第一存储块中正在写入数据。
可选的,还包括:设置模块;
设置模块,用于将所述目标存储块对应的状态设置为第二状态;
设置模块,还用于将所述目标存储块对应的状态设置为第一状态。
可选的,还包括:更新模块;
更新模块,用于更新所述共享内存中的存储索引值,更新后的存储索引值比更新前的存储索引值大1,所述存储索引值用于指示所述共享内存中已完成写入数据的存储块。
可选的,获取模块,还用于获取所述目标用户设备对应的读取索引值,其中,所述读取索引值用于指示所述目标用户设备从所述共享内存中已经完成读取数据的存储块;
确定模块,还用于确定所述存储索引值大于所述读取索引值。
可选的,发送模块,还用于向所述目标用户设备发送读取索引值的更新消息,所述更新消息用于指示所述目标用户设备更新所述读取索引值,所述更新后的读取索引值比更新前的读取索引值大1。
可选的,发送模块,还用于向目标用户设备发送数据读取消息,所述数据读取消息用于指示所述目标用户设备从所述共享内存中读取数据。
可选的,写入模块,具体用于:
确定所述目标存储块为所述共享内存中的首个存储块,且所述首个存储块中已存储数据,则将所述目标数据替换存储至所述首个存储块中。
第三方面,本公开还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例中的任一种所述的共享内存的数据处理方法。
第四方面,本公开还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例中的任一种所述的共享内存的数据处理方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:利用索引值实时记录共享内存中写入数据的存储块的存储位置,在一个数据发布者在写入数据过程中并不需要锁定共享内存,使得多个数据发布者能够根据索引值进行数据的同时写入,从而,能够有效实现共享内存中多数据的同时写入。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种共享内存的数据处理方法的流程示意图;
图2是本公开实施例提供的另一种共享内存的数据处理方法的流程示意图;
图3是本公开实施例提供的一种数据写入和数据读取的示意图;
图4是本公开实施例提供的又一种共享内存的数据处理方法的流程示意图;
图5是本公开实施例提供的又一种共享内存的数据处理方法的流程示意图;
图6是本公开实施例提供的一种共享内存的数据处理装置的结构示意图;
图7是本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
在车辆控制系统中,会将应用程序的不同功能服务(如后台控制服务、日志记录服务)进行拆分,服务之间通过接口和协议进行通信,通信所需的信息会被存储在共享内存中。数据发布者可向共享内存中写入消息,同时,数据订阅者可从共享内存中读取消息。
现有技术中,数据发布者在向共享内存中写入消息时,会将共享内存锁住,等待写入操作执行完毕,再将共享内存打开。期间,其他数据发布者不能进行写入操作,数据订阅者也不能进行数据读取。
本实施例通过在共享内存中写入数据时,只锁定写入数据的存储块,其他存储块处于开放状态,使得其他数据发布者可执行写入操作,同时,数据订阅者也可进行数据的有效读取。解决了现有方法难以实现同时写入和同时读写的问题。
图1是本公开实施例提供的一种共享内存的数据处理方法的流程示意图。本实施例可适用于多个数据发布者在共享内存中同时进行写入数据的情况。本实施例方法可由共享内存的数据处理装置来执行,该装置可采用硬件/或软件的方式来实现,并可配置于电子设备中。可实现本申请任意实施例所述的共享内存的数据处理方法。如图1所示,该方法具体包括如下:
S110、接收目标数据的写入操作请求,写入操作请求用于请求将目标数据写入共享内存。
在本实施例中,目标数据的写入操作请求是数据发布者需要向共享内存中写入数据时,向共享内存发送的一个请求。在电子设备接收到目标数据的写入操作请求时,可将写入操作请求中携带的目标数据写入到共享内存中对应的存储块中。
其中,共享内存中可包括多个主题,其中每个主题下可写入多个存储块。目标数据的写入操作请求中还可包括目标数据待写入的主题的标识,使得电子设备能够直接定位到目标数据在共享内存中的存储块。
S120、获取共享内存中的写入索引值,并更新写入索引值,更新后的写入索引值比更新前的写入索引值大1,写入索引值用于锁定待写入数据的存储块。
在本实施例中,写入索引值记录着共享内存中最近写入数据的存储块的标识,来对数据发布者的写入数据操作进行指示,使得数据发布者能够根据写入索引值准确了解到共享内存中当前写入数据的存储块的位置。
其中,存储块的标识的具体实现方式可采用数字,或者字母,或者数据和字母的组合来实现。从而,使得电子设备能够对共享内存中的多个存储块进行统一管理。
电子设备在接收到目标数据的写入操作请求后,需要对共享内存中记录的写入索引值进行更新。本实施例中电子设备可在接收到一个写入操作请求后,在共享内存中根据写入索引值分配一个存储块来供数据发布者写入目标数据。
需要说明的是,共享内存中的写入索引值可采用由小至大的顺序进行更新叠加,从而,能够保证共享内存中的每个存储块能够被有效利用。
S130、确定更新后的写入索引值对应的存储块为目标存储块。
在本实施例中,共享内存中包含多个存储块,写入索引值能够依次遍历完共享内存中所有的存储块。
其中,共享内存中存储块的标识可采用预设规则顺序排列,且写入索引值为其中一个存储块的标识,从而,能够保证写入索引值再更新时能够准确定位到存储块。
本实施例中,预设规则的具体实现方式可采用数字按照大小依次递增的实现方式。
示例性的,共享内存中包含10个存储块,第一个存储块至第十个存储块依次按照数字1-10进行标识,在写入索引值更新至4时,可直接定位出第四存储块为目标数据待存储的目标存储块。
S140、将目标数据写入目标存储块中。
在本实施例中,电子设备将接收到的数据发布者发送的目标数据写入目标存储块中,电子设备可通过拷贝等其他方式将目标数据写入目标存储块中。
本实施例中的写入索引值能够支持多个数据同时写入共享内存中不同存储块的操作,从而,使得多个数据发布者能够同时在共享内存中执行数据写入操作,能够有效提高共享内存中数据的写入效率。同时,能够避免多线程同时在一个存储块中写入数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。
其中,在电子设备对于第一写入操作(如目标数据的写入操作请求)请求进行数据库的分配后,还接收到了第二写入操作请求(如另一个数据的写入操作请求),且目标数据正在写入,此时,电子设备可再次更新写入索引值,为第二写入操作请求顺序分配下一个存储块,使得多个数据能够同时被写入共享内存中。
示例性的,第一写入操作对应的写入索引值为4,则目标数据待存储的存储块为4对应的存储块,电子设备将目标数据写入4对应的存储块过程中,接收到第二写入操作请求,则将写入索引值更新为5,并在4对应的存储块中写入目标数据的同时,在5对应的存储块中写入第二写入操作请求对应的数据。
在本实施例中,可选的,将目标数据写入目标存储块中,包括:
确定目标存储块为共享内存中的首个存储块,且首个存储块中已存储数据,则将目标数据替换存储至首个存储块中。
本实施例中,在共享内存中包括的存储块均已被写入数据时,电子设备接收到目标数据的写入操作请求,则可选择利用目标数据覆盖共享内存中首个存储块中的数据。从而,使得目标数据能够被有效写入共享内存中。
本公开实施例能够有效利用索引值实时记录共享内存中写入数据的存储块的存储位置,在一个数据发布者在写入数据过程中并不需要锁定共享内存,使得多个数据发布者能够根据索引值进行数据的同时写入,从而,能够有效实现共享内存中多数据的同时写入。
图2是本公开实施例提供的另一种共享内存的数据处理方法的流程示意图。本实施例是在上述实施例的基础上,进一步地,在步骤S140之后,本实施例方法还可以包括:
S150、接收目标用户设备的读取操作请求,读取操作请求用于请求读取共享内存中第一存储块的数据。
在本实施例中,目标用户设备为多个共享内存中数据的数据订阅者所使用设备中的一个设备。目标用户设备的读取操作请求是数据订阅者需要从共享内存中读取数据时,通过目标用户设备向共享内存发送的一个请求。在电子设备接收到目标用户设备发送的读取操作请求时,可根据读取操作请求中携带的待读取数据的标识从对应的存储块中读取出来。
其中,共享内存中可包括多个主题,其中每个主题下可写入多个存储块。目标用户设备的读取操作请求中还可包括目标数据待读取的主题的标识,使得电子设备能够直接从共享内存中的多个存储块查找出待读取的数据。
需要说明的是,目标用户设备可主动向电子设备发送读取操作请求,目标用户设备发送的读取操作请求可为根据目标用户设备预先设定的数据读取时间进行发送,或者,目标用户设备可根据接收到电子设备发送的数据读取消息向电子设备发送读取操作请求。使得目标用户设备能够及时获取到共享内存中更新的新的数据。
其中,第一存储块可由目标用户设备根据从共享内存中读取到的存储块确定得出。
在本实施例中,可选的,确定第一存储块对应的状态为第一状态之前,本实施例方法还包括:
获取目标用户设备对应的读取索引值,其中,读取索引值用于指示目标用户设备从共享内存中已经完成读取数据的存储块;
确定存储索引值大于读取索引值。
本实施例中,读取索引值为目标用户设备记录的上一次从共享内存中读取数据的存储块的标识,存储块的标识如数字,或者字母,或者数字和字母的组合。
电子设备在确定出存储索引值大于读取索引值时,表明共享内存中有新的数据被写入,此时,可将读取到的数据返回给目标用户设备。使得目标用户能够有效获取到待读取的数据。
电子设备在确定出存储索引值等于读取索引值时,表明共享内存中没有新的数据的写入,此时,电子设备可向目标用户设备返回读取操作请求的响应信息,读取操作请求的响应信息中包括无新数据写入的消息指示。从而,能够避免电子设备从共享内存中重复读取数据增加资源消耗的问题。
S160、在第一存储块中的数据读取完成之后,根据第一存储块对应的状态,向目标用户设备发送数据读取消息,数据读取消息用于指示第一存储块的读取结果。
在本实施例中,共享内存中的任一存储块在读取数据的过程中,均有可能出现数据写入操作的情况,为了使得数据读取成功,因此,需要在数据读取完成后,再次检查第一存储块对应的状态,从而,防止无效数据的产生。
本实施例提供了一种数据写入和数据读取的示意图,具体可参见图3所示。
其中,共享内存中可分为三个存储空间,每个存储空间中存储不同信息。如存储空间(C)中包括多个存储块,其中部分或全部存储块中已被写入数据,存储空间(B)中对应存储每个存储块的状态(state),存储空间(A)中存储写入索引值、存储索引值、C中包括的所有存储块的总数量(count)和C中每个存储块的存储容量(size)。
需要说明的是,每个存储块的存储容量可相同,也可不相同。
写入数据过程:
在一个存储块的写入数据完成后,且无数据写入操作时,写入索引值和存储索引值相同。则获取到的写入索引值(lock_index)为4,将其存储在中间变量(l_lock_index),基于原子操作(Compare And Swap,CAS)操作,原子性的将写入索引值加1,如图3所示,写入索引值为5。将l_lock_index对应的状态(state)原子性地标记为无效(INVILAD),将目标数据(message)拷贝到l_lock_index对应的C中的第五个存储块中,将l_lock_index对应的meat的state原子性地标记为有效(VAILAD),将存储索引值(write_index)原子性地加1,此时,write_index=5。使用Futex唤醒等待Futex的线程,使得数据订阅者能够及时获取数据。
读取数据过程:
数据订阅者调用futex_wait将自己陷入睡眠,在接收到wake操作唤醒时(可由电子设备发送),电子设备比对存储索引值(write_index),和读取索引值(read_index)进行大小比对,若write_index大于read_index,则需要读取数据。判断第一存储块的状态为有效时进行数据读取,读取完成后,再次判断第一存储块的状态为有效,将读取到的数据发送给数据订阅者。其中,若再次判断第一存储块的状态为无效,则丢弃读取到的数据。
本实施例能够采用更底层的futex系统调用完成数据更新通知,既解决了进程间通信时死锁的问题,又提高了数据处理的效率。
图4是本公开实施例提供的又一种共享内存的数据处理方法的流程示意图。本实施例是在上述实施例的基础上,其中,步骤S160的一种可能实现的方式如下:
S1601、在第一存储块中的数据读取完成之后,检测到第一存储块对应的状态为第一状态,则向目标用户设备发送第一数据读取消息,第一数据读取消息中包括第一存储块中的数据。
本实施例中,第一存储块对应的状态能够表征出第一存储块中存储数据的状态,即有效或无效,或者正在写入、写入完成。第一状态可为有效,在电子设备确定出第一存储块对应的状态为有效时,表示第一存储块中已成功写入数据,且此时无任一数据发布者执行数据写入的操作。
其中,本实施例可支持数据同时读写的操作,则电子设备在从第一存储块读取数据时,可能存储数据发布者向第一存储块中写入数据的情况,此时,则从第一存储块中读取的数据是无效的,即已经被写入操作打乱第一存储块中原本存储的数据。
因此,电子设备在第一存储块中的数据读取完成后,需要再次确定第一存储块对应的状态是否还保持为有效,若是,则表明电子设备在第一存储块中读取数据的过程中没有任一数据发布者向第一存储块中写入数据,则说明读取到的数据是有效可用的。从而,能够有效保证电子设备发送给目标用户设备的数据是准确无误的。
在本实施例中,可选的,向目标用户设备发送第一数据读取消息之后,本实施例方法还包括:
向目标用户设备发送读取索引值的更新消息,更新消息用于指示目标用户设备更新读取索引值,更新后的读取索引值比更新前的读取索引值大1。
本实施例中,电子设备在将从第一存储块中读取的数据发送给目标用户设备后,需要提醒目标用户设备对其本地存储的读取索引值进行更新,从而,使得目标用户设备在下一次从共享内存中获取消息时,能够提供准确的读取索引值,来保证获取到的数据的有效性。
S1602、检测到第一存储块对应状态为第二状态,则向目标用户设备发送第二数据读取消息,第二数据读取消息用于指示第一存储块中的数据读取失败。
其中,第二状态用于指示第一存储块中正在写入数据。
在本实施例中,第一存储块对应的状态能够表征出第一存储块中存储数据的状态,即有效或无效。第二状态可为无效,在电子设备确定出第一存储块对应的状态为无效时,表示第一存储块中正在写入数据,即存在一个或多个数据发布者正在向第一存储块中写入数据。
此时,电子设备需要丢弃从第一存储块中读取到数据,并向目标用户设备发送数据读取失败的信息,使得,目标用户设备能够及时了解到第一存储块中的操作状态。从而,能够有效避免电子设备将不正常数据发送给目标用户设备导致目标用户设备获取到数据准确性较低的问题。
需要说明的是,本实施例中的S1601和S1602是第一存储块对应的状态的两种检测结果,即第一存储块对应的状态可能为有效或者第一存储块对应的状态可能为无效。
在本实施例中,可选的,将目标数据写入目标存储块中之前,本实施例方法还包括:
将目标存储块对应的状态设置为第二状态;
将目标数据写入目标存储块中之后,本实施例方法还包括:
将目标存储块对应的状态设置为第一状态。
本实施例中,电子设备在将目标数据写入共享内存中的目标存储块之前,需要锁定目标存储块,避免其他数据同时被写入导致目标存款块中数据一致性较差的问题。
在电子设备将目标数据写入共享内存的目标存储块之后,表明目标存储块中的数据已写入完成,需要打开目标存储块,使得,在其他数据被写入目标存储块时能够有效执行写入操作。从而,保证目标存储块中数据的时效性。
在本实施例中,可选的,将目标存储块对应的状态设置为第一状态之后,本实施例方法还包括:
更新共享内存中的存储索引值,更新后的存储索引值比更新前的存储索引值大1,存储索引值用于指示共享内存中已完成写入数据的存储块。
本实施例中,电子设备在将目标存储块对应的状态设置为有效之后,表明目标存储块中已执行完数据写入操作,即目标存储块中已成功存储数据,将共享内存的存储索引值进行更新,使得共享内存中已写入数据的存储块能够得到有效的标识,从而,便于其他用户从共享内存中获取数据时能够准确识别出更新后的数据。
图5是本公开实施例提供的又一种共享内存的数据处理方法的流程示意图。本实施例是在上述实施例的基础上,进一步地,在步骤S140之后,本实施例方法还可以包括:
S170、向目标用户设备发送数据读取消息,数据读取消息用于指示目标用户设备从共享内存中读取数据。
在本实施例中,电子设备在将目标数据写入目标存储块中,需要及时提醒目标存储块中的数据订阅者来获取数据,从而使得数据订阅者能够及时获取到共享内存更新后的新的数据。
另外,数据读取消息还可包括目标数据对应的主题,使得目标用户设备能够清晰了解到获取的数据的所属主题,从而,便于目标用户对获取到的数据的合理利用。
图6是本公开实施例提供的一种共享内存的数据处理装置的结构示意图;该装置配置于电子设备中,可实现本申请任意实施例所述的共享内存的数据处理方法。该装置具体包括如下:
接收模块610,用于接收目标数据的写入操作请求,所述写入操作请求用于请求将所述目标数据写入共享内存;
获取模块620,用于获取所述共享内存中的写入索引值,并更新所述写入索引值,更新后的写入索引值比更新前的写入索引值大1,所述写入索引值用于锁定待写入数据的存储块;
确定模块630,用于确定更新后的写入索引值对应的存储块为目标存储块;
写入模块640,用于将所述目标数据写入所述目标存储块中。
在本实施例中,可选的,本实施例装置还包括:读取模块和发送模块;
接收模块610,还用于接收目标用户设备的读取操作请求,所述读取操作请求用于请求读取所述共享内存中第一存储块的数据;
读取模块,用于检测到第一存储块对应的状态为第一状态,则读取所述第一存储块中的数据,其中,所述第一状态用于指示所述第一存储块中已完成写入数据;
发送模块,用于在所述第一存储块中的数据读取完成之后,根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,所述数据读取消息用于指示所述第一存储块的读取结果。
在本实施例中,可选的,发送模块,具体用于:
检测到所述第一存储块对应的状态为第一状态,则向所述目标用户设备发送第一数据读取消息,所述第一数据读取消息中包括所述第一存储块中的数据;
或者,检测到所述第一存储块对应状态为第二状态,则向所述目标用户设备发送第二数据读取消息,所述第二数据读取消息用于指示所述第一存储块中的数据读取失败;
其中,所述第二状态用于指示所述第一存储块中正在写入数据。
在本实施例中,可选的,本实施例装置还包括:设置模块;
设置模块,用于将所述目标存储块对应的状态设置为第二状态;
设置模块,还用于将所述目标存储块对应的状态设置为第一状态。
在本实施例中,可选的,本实施例装置还包括:更新模块;
更新模块,用于更新所述共享内存中的存储索引值,更新后的存储索引值比更新前的存储索引值大1,所述存储索引值用于指示所述共享内存中已完成写入数据的存储块。
在本实施例中,可选的,获取模块620,还用于获取所述目标用户设备对应的读取索引值,其中,所述读取索引值用于指示所述目标用户设备从所述共享内存中已经完成读取数据的存储块;
确定模块630,还用于确定所述存储索引值大于所述读取索引值。
在本实施例中,可选的,发送模块,还用于向所述目标用户设备发送读取索引值的更新消息,所述更新消息用于指示所述目标用户设备更新所述读取索引值,所述更新后的读取索引值比更新前的读取索引值大1。
在本实施例中,可选的,发送模块,还用于向目标用户设备发送数据读取消息,所述数据读取消息用于指示所述目标用户设备从所述共享内存中读取数据。
在本实施例中,可选的,写入模块,具体用于:
确定所述目标存储块为所述共享内存中的首个存储块,且所述首个存储块中已存储数据,则将所述目标数据替换存储至所述首个存储块中。
通过本发明实施例的共享内存的数据处理装置,能够利用索引值实时记录共享内存中写入数据的存储块的存储位置,在一个数据发布者在写入数据过程中并不需要锁定共享内存,使得多个数据发布者能够根据索引值进行数据的同时写入,从而,能够有效实现共享内存中多数据的同时写入。
本发明实施例所提供的共享内存的数据处理装置可执行本发明任意实施例所提供的共享内存的数据处理方法,具备执行方法相应的功能模块和有益效果。
图7是本公开实施例提供的一种电子设备的结构示意图。如图7所示,该电子设备包括处理器710、存储器720、输入装置730和输出装置740;电子设备中处理器710的数量可以是一个或多个,图7中以一个处理器710为例;电子设备中的处理器710、存储器720、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线连接为例。
存储器720作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的共享内存的数据处理方法对应的程序指令/模块。处理器710通过运行存储在存储器720中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现本发明实施例所提供的共享内存的数据处理方法。
存储器720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器720可进一步包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置730可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入,可以包括键盘、鼠标等。输出装置740可包括显示屏等显示设备。
本公开实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于实现本发明实施例所提供的共享内存的数据处理方法。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的共享内存的数据处理方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述搜索装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (12)
1.一种共享内存的数据处理方法,其特征在于,所述方法包括:
接收目标数据的写入操作请求,所述写入操作请求用于请求将所述目标数据写入共享内存;
获取所述共享内存中的写入索引值,并更新所述写入索引值,更新后的写入索引值比更新前的写入索引值大1,所述写入索引值用于锁定待写入数据的存储块;
确定更新后的写入索引值对应的存储块为目标存储块;
将所述目标数据写入所述目标存储块中。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收目标用户设备的读取操作请求,所述读取操作请求用于请求读取所述共享内存中第一存储块的数据;
检测到第一存储块对应的状态为第一状态,则读取所述第一存储块中的数据,其中,所述第一状态用于指示所述第一存储块中已完成写入数据;
在所述第一存储块中的数据读取完成之后,根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,所述数据读取消息用于指示所述第一存储块的读取结果。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一存储块对应的状态,向所述目标用户设备发送数据读取消息,包括:
检测到所述第一存储块对应的状态为第一状态,则向所述目标用户设备发送第一数据读取消息,所述第一数据读取消息中包括所述第一存储块中的数据;
或者,检测到所述第一存储块对应状态为第二状态,则向所述目标用户设备发送第二数据读取消息,所述第二数据读取消息用于指示所述第一存储块中的数据读取失败;
其中,所述第二状态用于指示所述第一存储块中正在写入数据。
4.根据权利要求3所述的方法,其特征在于,所述将所述目标数据写入所述目标存储块中之前,所述方法还包括:
将所述目标存储块对应的状态设置为第二状态;
将所述目标数据写入所述目标存储块中之后,所述方法还包括:
将所述目标存储块对应的状态设置为第一状态。
5.根据权利要求4所述的方法,其特征在于,所述将所述目标存储块对应的状态设置为第一状态之后,所述方法还包括:
更新所述共享内存中的存储索引值,更新后的存储索引值比更新前的存储索引值大1,所述存储索引值用于指示所述共享内存中已完成写入数据的存储块。
6.根据权利要求5所述的方法,其特征在于,所述确定第一存储块对应的状态为第一状态之前,所述方法还包括:
获取所述目标用户设备对应的读取索引值,其中,所述读取索引值用于指示所述目标用户设备从所述共享内存中已经完成读取数据的存储块;
确定所述存储索引值大于所述读取索引值。
7.根据权利要求6所述的方法,其特征在于,所述向所述目标用户设备发送第一数据读取消息之后,所述方法还包括:
向所述目标用户设备发送读取索引值的更新消息,所述更新消息用于指示所述目标用户设备更新所述读取索引值,所述更新后的读取索引值比更新前的读取索引值大1。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
向目标用户设备发送数据读取消息,所述数据读取消息用于指示所述目标用户设备从所述共享内存中读取数据。
9.根据权利要求1所述的方法,其特征在于,所述将所述目标数据写入所述目标存储块中,包括:
确定所述目标存储块为所述共享内存中的首个存储块,且所述首个存储块中已存储数据,则将所述目标数据替换存储至所述首个存储块中。
10.一种共享内存的数据处理装置,其特征在于,所述装置包括:
接收模块,用于接收目标数据的写入操作请求,所述写入操作请求用于请求将所述目标数据写入共享内存;
获取模块,用于获取所述共享内存中的写入索引值,并更新所述写入索引值,更新后的写入索引值比更新前的写入索引值大1,所述写入索引值用于锁定待写入数据的存储块;
确定模块,用于确定更新后的写入索引值对应的存储块为目标存储块;
写入模块,用于将所述目标数据写入所述目标存储块中。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1~9中任一所述的共享内存的数据处理方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1~9中任一所述的共享内存的数据处理方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110699208.7A CN115437798A (zh) | 2021-06-23 | 2021-06-23 | 共享内存的数据处理方法、装置、设备和介质 |
EP22827175.5A EP4361811A1 (en) | 2021-06-23 | 2022-04-24 | Data processing method and apparatus for shared memory, and device and medium |
PCT/CN2022/088856 WO2022267676A1 (zh) | 2021-06-23 | 2022-04-24 | 共享内存的数据处理方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110699208.7A CN115437798A (zh) | 2021-06-23 | 2021-06-23 | 共享内存的数据处理方法、装置、设备和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115437798A true CN115437798A (zh) | 2022-12-06 |
Family
ID=84240352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110699208.7A Pending CN115437798A (zh) | 2021-06-23 | 2021-06-23 | 共享内存的数据处理方法、装置、设备和介质 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4361811A1 (zh) |
CN (1) | CN115437798A (zh) |
WO (1) | WO2022267676A1 (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5548728A (en) * | 1994-11-04 | 1996-08-20 | Canon Information Systems, Inc. | System for reducing bus contention using counter of outstanding acknowledgement in sending processor and issuing of acknowledgement signal by receiving processor to indicate available space in shared memory |
CN103559166A (zh) * | 2013-11-11 | 2014-02-05 | 厦门亿联网络技术股份有限公司 | 一种多核之间的高速数据传输的方法 |
CN106168916B (zh) * | 2016-06-24 | 2018-06-26 | 北京百度网讯科技有限公司 | 数据传输方法和系统 |
CN107632945A (zh) * | 2016-07-18 | 2018-01-26 | 大唐移动通信设备有限公司 | 一种共享内存的数据读写方法和装置 |
CN114327946A (zh) * | 2021-12-24 | 2022-04-12 | 北京百度网讯科技有限公司 | 共享内存访问控制方法、装置、电子设备及自动驾驶车辆 |
-
2021
- 2021-06-23 CN CN202110699208.7A patent/CN115437798A/zh active Pending
-
2022
- 2022-04-24 EP EP22827175.5A patent/EP4361811A1/en active Pending
- 2022-04-24 WO PCT/CN2022/088856 patent/WO2022267676A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
EP4361811A1 (en) | 2024-05-01 |
WO2022267676A1 (zh) | 2022-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7996570B1 (en) | Usage of keyboard driver in extensible firmware interface for adding new hot keys at firmware level | |
US20110296069A1 (en) | Fabric Based Lock Manager Service | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN111343142A (zh) | 一种基于区块链网络的数据处理方法、装置及存储介质 | |
CN109981569B (zh) | 网络系统访问方法、装置、计算机设备及可读存储介质 | |
CN111385370B (zh) | Id分配方法、装置、存储介质及id分配系统 | |
US20180188990A1 (en) | Method, apparatus and system for inserting disk | |
CN111817984A (zh) | 消息发送方法、装置、设备及存储介质 | |
CN106294387B (zh) | 数据迁移方法和装置 | |
CN112202633A (zh) | 区块链网络的测试方法、装置、电子设备及可读存储介质 | |
CN113342507B (zh) | 一种分布式锁服务实现方法、装置及计算机设备 | |
CN111382206A (zh) | 一种数据存储方法及装置 | |
CN113064919B (zh) | 数据处理方法、数据存储系统、计算机设备及存储介质 | |
CN112015563B (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
CN108241616B (zh) | 消息推送方法和装置 | |
CN107203890B (zh) | 凭证数据发放方法、装置及系统 | |
CN115437798A (zh) | 共享内存的数据处理方法、装置、设备和介质 | |
CN111309693A (zh) | 一种数据同步方法、装置、系统、电子设备及存储介质 | |
CN114564466A (zh) | 一种管理数据库的数据库管理系统、方法 | |
US11940976B2 (en) | Technique for concurrency control | |
CN110839085A (zh) | 指令管理方法、装置、电子设备及存储介质 | |
CN115766298B (zh) | 一种令牌续期的确定方法、装置、电子设备及存储介质 | |
CN110046192B (zh) | 请求信息的序号生成系统和方法 | |
CN107370691B (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 |