CN111796948B - 一种共享内存访问方法、装置、计算机设备和存储介质 - Google Patents
一种共享内存访问方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111796948B CN111796948B CN202010627537.6A CN202010627537A CN111796948B CN 111796948 B CN111796948 B CN 111796948B CN 202010627537 A CN202010627537 A CN 202010627537A CN 111796948 B CN111796948 B CN 111796948B
- Authority
- CN
- China
- Prior art keywords
- data frame
- shared memory
- written
- data
- writing
- 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
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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Information Transfer Systems (AREA)
Abstract
本申请涉及一种共享内存访问方法、装置、计算机设备和存储介质。所述方法包括:接收针对所述共享内存的进程访问请求;获取所述进程访问请求对应的进程类型;所述进程类型包括写进程或者读进程;所述写进程中携带有待写入的数据;若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧被写入所述共享内存的序列号。采用本方法能够提高设备针对共享内存的数据处理效率。
Description
技术领域
本申请涉及操作***技术领域,特别是涉及共享内存访问方法、装置、计算机设备和存储介质。
背景技术
共享内存是操作***中多个正在运行的进程之间共享和交换数据的一种有效方式,可允许多个不相关的进程访问同一个区域的内存。如果某个进程向共享内存写入数据,所作的改动将影响到可以访问这段共享内存的任何其他进程的数据访问状态,例如若两个不同的进程同时向一段共享内存中写入数据,则其中一个进程写入的数据可能被覆盖或两个进程写入的数据会引起冲突。
传统技术中,为避免多进程访问共享内存时产生冲突,引入了资源锁技术,即进程在向共享内存中写入数据或读取数据时,都需要先获取访问该共享内存的资源锁,只有获取到资源锁的进程才能对共享内存进行写操作或读操作,这样可避免多个进程同时对共享内存写入数据或输出数据时产生冲突。
然而,在传统的资源锁技术中,获取不到资源锁的进程如果发生阻塞,需要一直等待直到获取到资源锁才能访问共享内存。尤其是在单进程写、多进程读的应用场景中,例如音视频采集与编码的应用中,音视频采集是匀速写入内存的,而编码使用不同的码率或帧率对共享内存执行数据读取操作,由于资源锁的存在,数据写入与读取都只能串行处理,假如某个进程出现了阻塞,就会影响其它进程的写入或读取操作,可见资源锁技术大大降低了设备的数据处理效率。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高设备的数据处理效率的共享内存访问方法、装置、计算机设备和存储介质。
一种共享内存访问方法,所述方法包括:
接收针对所述共享内存的进程访问请求;
获取所述进程访问请求对应的进程类型;所述进程类型包括写进程或者读进程;所述写进程中携带有待写入的数据;
若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧被写入所述共享内存的序列号。
在其中一个实施例中,还包括:
所述共享内存为包含设定数量字节单元的环形缓冲区;
所述状态标识中包括所述环形缓冲区的终点标识,用于指示写入的数据帧在所述环形缓冲区的终点。
在其中一个实施例中,所述状态标识还包括暂停标识,用于标记对应的数据帧为写进程异常退出的位置;
所述向所述共享内存写入所述待写入的数据的过程中,还包括:
若检测到所述写进程异常退出,针对所述写进程当前写入的数据帧中添加所述暂停标识。
在其中一个实施例中,所述方法还包括:
若为读进程,且确定所述共享内存的当前访问进程中还存在写进程,则向所述写进程发送消息;所述消息用于触发所述写进程返回所述写进程正在写的最新的数据帧的位置;
根据所述写进程正在写的最新的数据帧的位置,控制所述读进程访问所述最新的数据帧,并从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧。
在其中一个实施例中,所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:
读取当前数据帧的状态标识,若所述状态标识为正常标识,则继续读取当前帧的序列码标识;所述正常标识用于表示所述当前数据帧所处的位置为包含有效数据信息的非终点位置;
获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值,若为1,则读取当前数据帧的数据信息。
在其中一个实施例中,所述获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值之后,还包括:
若所述差值小于1,则周期性读取当前数据帧,直至所述差值等于1;
若间隔设定的周期后仍然未读取到所述差值为1的数据帧,则发送消息给所述写进程,所述消息用于指示写进程返回所述写进程最新写入的数据帧的位置给所述读进程;
根据所述写进程最新写入的数据帧的位置,控制所述读进程访问所述最新写入的数据帧,并从所述最新写入的数据帧开始依次读取所述环形缓冲区中的数据帧。
在其中一个实施例中,还包括:
通过所述写进程针对所述当前写入的数据帧添加有效性校验码,所述有效性校验码用于指示所述当前写入的数据帧的有效性;
所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:
读取当前数据帧的有效性校验码,根据所述有效性校验码判断所述当前数据帧的有效性,若无效,则舍弃所述当前数据帧,并读取下一数据帧。
在其中一个实施例中,所述方法还包括:
若为写进程,且确定所述共享内存的当前访问进程中已存在其他写进程,则拒绝所述写进程的所述进程访问请求。
一种共享内存访问装置,所述装置包括:
访问请求接收模块,用于接收针对所述共享内存的进程访问请求;
进程类型获取模块,用于获取所述进程访问请求对应的进程类型;所述进程类型包括写进程或者读进程;所述写进程中携带有待写入的数据;
数据写入模块,用于若确定进程类型为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一种共享内存访问方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种共享内存访问方法的步骤。
上述共享内存访问方法、装置、计算机设备和存储介质,通过接收针对所述共享内存的进程访问请求,获取所述进程访问请求对应的进程类型,若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,则向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号,这种访问方法不需要使用资源锁,通过只允许一个写进程写入数据,避免多个写进程同时写入数据造成数据冲突,同时通过为数据帧添加状态标识的方式写入正确的数据,为读进程读取数据提供了正确的指引,减少了因为某一个进程发生阻塞导致其他进程都无法读取数据这种情况的发生,从而提高了设备的数据处理效率。
附图说明
图1为一个实施例中共享内存访问方法的流程示意图;
图2为一个实施例中环形缓冲区的结构示意图;
图3为另一个实施例中共享内存访问方法的流程示意图;
图4为一个实施例中共享内存访问装置的结构框图;
图5为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的一种共享内存访问方法,可以应用于终端或者服务器中。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
图1为一实施例的共享内存访问方法的示意性流程图;如图1所示,本实施例中的共享内存访问方法,包括以下步骤:
步骤102,接收针对所述共享内存的进程访问请求。
其中,共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到它们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。可选地,可在内存中开辟一段环形缓冲区作为共享内存;所谓环形缓冲区,就是用一个指针去访问该缓冲区的最后一个内存位置的后一位置时回到环形缓冲区的起点,环形缓冲区的结构示意图如图2所示。
具体地,在一实施例中,中央处理单元(CPU)接收程序中的指令,所述指令包括对共享内存的进程访问请求,其中,进程访问请求可能是请求对共享内存发起写入数据的一个或多个访问请求,也可能是请求对共享内存内的数据请求读取数据的一个或多个访问请求。
步骤104,获取所述进程访问请求对应的进程类型;所述进程类型包括写进程或者读进程;所述写进程中携带有待写入的数据;
具体地,CPU通过判断进程类型,对共享内存执行相应的操作。例如,在在线音视频播放程序中,用户请求下载并播放一段音频,则CPU接收到该用户请求下载并播放音频的访问请求,其中包括了下载请求,即对共享内存申请写入音频数据的写进程访问请求,和对共享内存申请读取音频数据的读进程访问请求,若为写进程,则该写进程携带有对应的音频数据。
步骤106,若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号。
具体地,CPU判断当前进程为写进程后,还需要判断当前共享内存是否有其他写进程在写入数据,若此时没有其他共享内存在写入数据,则接受所述写进程的进程访问请求,向共享内存中写入待写入的数据,写进程每写一帧数据,都在当前数据帧中添加状态标识和序列码标识,其中状态标识主要用于指示当前数据帧的状态,状态标识例如可以是Normal或End,Normal是表示当前数据帧中将携带有效数据信息data;End是表示当前数据帧写入已经到达环形缓冲的终点,需要重新从环形缓冲的起点开始读取数据帧;另外,写进程每写一帧数据,还会在当前的数据帧中添加当前数据帧的序列码标识SerialNumber,SerialNumber每帧自动加1,序列码标识SerialNumber用于表示每个数据帧在共享内存中的唯一序列号。可选地,可在每个数据帧的帧头部位header中添加状态标识和序列码标识,如图2所示。可选地,如图2所示的环形缓冲区,所述状态标识还可以包括环形缓冲区的终点标识End,用于指示写入的数据帧在所述环形缓冲区的终点。
上述共享内存访问方法中,通过接收针对所述共享内存的进程访问请求,获取所述进程访问请求对应的进程类型,若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,则向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号,这种访问方法不需要使用资源锁,通过只允许一个写进程写入数据,避免多个写进程同时写入数据造成数据冲突,同时通过为数据帧添加状态标识和唯一的序列码标识的方式写入正确的数据,为后续其他进程读取数据提供了识别依据。
在一个实施例中,所述状态标识还包括暂停标识,用于标记对应的数据帧为写进程异常退出的位置:所述向所述共享内存写入所述待写入的数据的过程中,还包括:若检测到所述写进程异常退出,针对所述写进程当前写入的数据帧中添加所述暂停标识。具体地,写进程每写入一帧数据帧,都在数据帧中添加状态标识,状态标识除Normal和End两种状态之外,还包括Pause标识,Pause标识用于表示当前写进程处于暂停状态,设置暂停标识主要是为了解决进程异常退出的问题。例如,在音视频播放业务中,若音视频数据下载进程受外界环境影响突然中止,比如断电等,则此时数据下载进程,即写进程在环形缓冲区中当前写入的数据帧中添加Pause状态标识,使得CPU再次检测到当前下载业务即写进程的访问请求时,可以快速定位到Pause状态标识,从上次进程异常退出的位置开始继续写入数据。
上述实施例通过使用Pause暂停状态标识,用于表示写进程异常退出的位置,便于CPU定位到程序异常退出的位置,解决当前位置出现的问题,而不需要从环形缓冲区的起始部位重新开始写入数据,进一步提高了数据写入效率。
在一实施例中,如图3所示,图3为一实施例中共享内存访问方法的流程示意图,所述共享内存访问方法还包括:若为读进程,且确定所述共享内存的当前访问进程中还存在写进程,则向所述写进程发送消息;所述消息用于触发所述写进程返回所述写进程正在写的最新的数据帧的位置。所谓消息,是指进行传送的数据单位。消息可以非常简单,例如只包含文本字符串,也可以很复杂,可能包含嵌入对象。具体地,若中央处理器(CPU)检测到访问进程的类型为读进程,并检测到当前的环形缓冲区中有唯一的写进程正在写入数据,则向该写进程发送消息,该消息用于触发所述写进程返回当前正在写的最新的数据帧的位置,该位置可以是当前数据帧的序列码标识。
其中,读进程可通过消息队列向写进程发送消息,消息队列是在消息的传输过程中保存消息的容器,消息队列在将消息从它的源中继到它的目标时充当中间人。消息队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
进一步地,向所述写进程发送消息的步骤之后,还包括:根据所述写进程正在写的最新的数据帧的位置,控制所述读进程访问所述最新的数据帧,并从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧。具体地,读进程通过写进程返回的序列码标识在环形缓冲区中找到该数据帧的位置开始依次读取数据,而不需要从环形缓冲区的起始部位开始读取数据,如果环形缓冲区的长度很长,从起始部位开始读取的话可能会延时几秒钟才能与当前写进程同步,导致程度实时性较差。
上述实施例通过检测到当前访问请求的进程类型为读进程后,向写进程发送消息,触发写进程返回当前正在写的最新的数据帧的位置给读进程,使得读进程第一次访问共享内存时,能够快速定位到当前正在写的最新的数据帧开始依次读取数据,而不必从共享内存的起始位置开始读取数据,提高了数据读取的实时性。
在另一实施例中,所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:读取当前数据帧的状态标识,若所述状态标识为正常标识,则继续读取当前帧的序列码标识;所述正常标识用于表示所述当前数据帧所处的位置为包含有效数据信息的非终点位置。具体地,读进程从最新的数据帧开始读取数据,首先获取当前数据帧的状态标识,若状态标识为Normal,则表示当前数据帧中携带数据信息data,则读进程继续读取当前数据帧的序列码标识。
进一步地,所述继续读取当前数据帧的序列码标识的步骤之后,还包括:获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值,若为1,则读取当前数据帧的数据信息。具体地,读进程读取当前数据帧的序列码标识a,并获取已读取的上一数据帧的序列码标识b,计算得到两者的差值a-b,若差值a-b为1,则说明当前数据帧与上一数据帧是连续的,进而读取当前数据帧的数据信息。
上述实施例中,读进程读取数据时,通过判断当前数据帧的序列码标识与上一数据帧帧的序列码标识的差值是否为1来判断当前数据帧是否为正确的数据帧,避免读取错误的数据,同时在多个读进程一起读取数据时,也能保证每个读进程读取数据是相互独立、互不干扰的。
在一实施例中,所述获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值之后,还包括:
若所述差值小于1,则周期性读取当前数据帧,直至所述差值等于1。具体地,若上述读进程读取的当前数据帧的序列码标识a与已读取的上一数据帧的序列码标识b,两者的差值a-b<1,则说明在该环形缓冲区中,读进程读取数据过快,需要等待新数据到来再读取数据。于是,读进程每隔设定的时间周期就读取一次当前数据,直到获取当前数据帧与上一数据帧的序列码标识差值等于1后,继续依次读取数据。
若间隔设定的读取次数后仍然未读取到所述差值为1的数据帧,则发送消息给所述写进程,所述消息用于指示写进程返回所述写进程最新写入的数据帧的位置给所述读进程。具体地,若上述读进程超过一定的次数仍然无法读取到正确的数据,说明读进程读取数据太慢,待读取的正确数据被写进程新写入的数据覆盖了,导致无法找到有效的数据帧,这时读进程会通过消息队列发送消息给写进程,写进程返回正在写的最新的数据帧的位置给读进程,例如可以发送正在写的数据帧的序列码标识符给读进程。
根据所述写进程最新写入的数据帧的位置,控制所述读进程访问所述最新写入的数据帧,并从所述最新写入的数据帧开始依次读取所述环形缓冲区中的数据帧。具体地,上述读进程获取写进程发送的正在写的最新的数据帧的位置,例如序列码标识,通过该序列码标识重新定位到该最新的数据帧,从所述最新的数据帧开始依次读取数据帧。
上述实施例在读进程判断当前数据帧与已读取的上一数据帧的序列码标识小于1的情况下,通过多次读取等待新数据到来,若超过一定次数仍无法读取正确的数据,则发送消息给写进程,找到最新写入的数据帧的位置,从最新的数据帧开始依次读取数据,解决了读进程读取过快和读取过慢的问题,保证了读进程与写进程的同步。
在一实施例中,所述共享内存访问方法还包括:通过所述写进程针对所述当前写入的数据帧添加有效性校验码,所述有效性校验码用于指示所述当前写入的数据帧的有效性。具体地,写进程每写一帧数据,会往当前数据帧中记录每一帧数据有效性校验码AVDataCheck,这个有效性校验码AVDataCheck能够校验写入帧是否合法。
进一步地,所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:读取当前数据帧的有效性校验码,根据所述有效性校验码判断所述当前数据帧的有效性,若无效,则舍弃所述当前数据帧,并读取下一数据帧。具体地,读进程通过这个数据有效性校验码AVDataCheck来检测读到的数据是否正确,如果不正常,则丢弃读到的非法数据,并读取下一数据帧,继续根据当前数据帧的有效性校验码AVDataCheck判断当前数据帧的有效性,以此类推。
上述实施例通过在每一数据帧的帧头部位添加数据有效性校验码AVDataCheck来检测读到的数据是否正确,进一步增强了读取数据的准确性,避免读取非法数据或其他写进程写入的数据。
在一实施例中,所述共享内存访问方法还包括:若为写进程,且确定所述共享内存的当前访问进程中已存在其他写进程,则拒绝所述写进程的所述进程访问请求。具体地,若中央处理器(CPU)检测到当前的访问申请对应的进程类型为写进程,但同时也检测到还有其他写进程正在访问共享内存,则拒绝当前申请访问的写进程,待正在写入数据的写进程结束后再接收其他写进程的访问申请。
上述实施例在共享内存中存在其他写进程的情况下通过拒绝其他写进程的访问申请,保证了共享内存中只有一个写进程写入数据,避免了多个写进程同时写入数据造成数据被覆盖或数据冲突。
应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种共享内存访问装置400,包括访问请求接收模块401、进程类型获取模块402、数据写入模块403,其中:
访问请求接收模块401,用于接收针对所述共享内存的进程访问请求;
进程类型获取模块402,用于获取所述进程访问请求对应的进程类型;所述进程类型包括写进程或者读进程;所述写进程中携带有待写入的数据;
数据写入模块403,用于若确定进程类型为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号。
上述装置实施例,通过接收针对所述共享内存的进程访问请求,获取所述进程访问请求对应的进程类型,若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,则向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号,这种访问方法不需要使用资源锁,通过只允许一个写进程写入数据,避免多个写进程同时写入数据造成数据冲突,同时通过为数据帧添加状态标识和唯一的序列码标识的方式写入正确的数据,为后续其他进程读取数据提供了识别依据。
在一个实施例中,所述共享内存为包含设定数量字节单元的环形缓冲区;所述数据写入模块403,用于若确定进程类型为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识中还包括所述环形缓冲区的终点标识,用于指示写入的数据帧在所述环形缓冲区的终点。
在一实施例中,所述状态标识还包括暂停标识,用于标记对应的数据帧为写进程异常退出的位置;所述数据写入模块403还用于,向所述共享内存写入所述待写入的数据的过程中,若检测到所述写进程异常退出,针对所述写进程当前写入的数据帧中添加所述暂停标识。
在一实施例中,如图4所示,所述共享内存访问装置400还包括:
数据读取模块404,用于若为读进程,且确定所述共享内存的当前访问进程中还存在写进程,则向所述写进程发送消息;所述消息用于触发所述写进程返回所述写进程正在写的最新的数据帧的位置;
数据读取模块404,还用于根据所述写进程正在写的最新的数据帧的位置,控制所述读进程访问所述最新的数据帧,并从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧。
在一实施例中,所述数据读取模块404进一步用于:
读取当前数据帧的状态标识,若所述状态标识为正常标识,则继续读取所述当前数据帧的序列码标识;所述正常标识用于表示所述当前数据帧所处的位置为包含有效数据信息的非终点位置;
获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值,若为1,则读取当前数据帧的数据信息。
在一实施例中,所述数据读取模块404,进一步用于:获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值之后,
若所述差值小于1,则周期性读取当前数据帧,直至所述差值等于1;
若间隔设定的读取次数后仍然未读取到所述差值为1的数据帧,则发送消息给所述写进程,所述消息用于指示写进程返回所述写进程最新写入的数据帧的位置给所述读进程;
根据所述写进程最新写入的数据帧的位置,控制所述读进程访问所述最新写入的数据帧,并从所述最新写入的数据帧开始依次读取所述环形缓冲区中的数据帧。
在一实施例中,所述数据写入模块403,还用于通过所述写进程针对所述当前写入的数据帧添加有效性校验码,所述有效性校验码用于指示所述当前写入的数据帧的有效性;
相应地,所述数据读取模块404,还用于读取当前数据帧的有效性校验码,根据所述有效性校验码判断所述当前数据帧的有效性,若无效,则舍弃所述当前数据帧,并读取下一数据帧。
在一实施例中,进程类型获取模块402,还用于若检测到当前访问请求对应的进程类型为写进程,且确定所述共享内存的当前访问进程中已存在其他写进程,则拒绝所述写进程的所述进程访问请求。
关于共享内存访问装置的具体限定可以参见上文中对于共享内存访问方法的限定,在此不再赘述。上述共享内存访问装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,也可以是终端,其内部结构图可以如图5所示。该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的数据库用于存储待写入共享内存的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种共享内存访问方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各方法实施例中的步骤:
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种共享内存访问方法,其特征在于,所述方法包括:
接收针对共享内存的进程访问请求;所述共享内存为包含设定数量字节单元的环形缓冲区;
获取所述进程访问请求对应的进程类型;所述进程类型包括写进程和读进程;所述写进程中携带有待写入的数据;
若为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧被写入所述共享内存的序列号;
若为读进程,且确定所述共享内存的当前访问进程中还存在写进程,则向所述写进程发送消息;所述消息用于触发所述写进程返回所述写进程正在写的最新的数据帧的位置;
根据所述写进程正在写的最新的数据帧的位置,控制所述读进程访问所述最新的数据帧,并从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧。
2.根据权利要求1所述的方法,其特征在于,
所述共享内存为包含设定数量字节单元的环形缓冲区;
所述状态标识中包括所述环形缓冲区的终点标识,用于指示写入的数据帧在所述环形缓冲区的终点。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述状态标识还包括暂停标识,用于标记对应的数据帧为写进程异常退出的位置;
所述向所述共享内存写入所述待写入的数据的过程中,还包括:
若检测到所述写进程异常退出,针对所述写进程当前写入的数据帧中添加所述暂停标识。
4.根据权利要求1所述的方法,其特征在于,所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:
读取当前数据帧的状态标识,若所述状态标识为正常标识,则继续读取所述当前数据帧的序列码标识;所述正常标识用于表示所述当前数据帧所处的位置为包含有效数据信息的非终点位置;
获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值,若为1,则读取当前数据帧的数据信息。
5.根据权利要求4所述的方法,其特征在于,所述获取所述当前数据帧的序列码标识与已读取的上一个数据帧的序列码标识的差值之后,还包括:
若所述差值小于1,则周期性读取当前数据帧,直至所述差值等于1;
若设定的读取次数后仍然未读取到所述差值为1的数据帧,则发送消息给所述写进程,所述消息用于指示写进程返回所述写进程最新写入的数据帧的位置给所述读进程;
根据所述写进程最新写入的数据帧的位置,控制所述读进程访问所述最新写入的数据帧,并从所述最新写入的数据帧开始依次读取所述环形缓冲区中的数据帧。
6.根据权利要求5所述的方法,其特征在于,还包括:
通过所述写进程针对所述当前写入的数据帧添加有效性校验码,所述有效性校验码用于指示所述当前写入的数据帧的有效性;
所述从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧的步骤包括:
读取当前数据帧的有效性校验码,根据所述有效性校验码判断所述当前数据帧的有效性,若无效,则舍弃所述当前数据帧,并读取下一数据帧。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:
若为写进程,且确定所述共享内存的当前访问进程中已存在其他写进程,则拒绝所述写进程的所述进程访问请求。
8.一种共享内存访问装置,其特征在于,所述装置包括:
访问请求接收模块,用于接收针对共享内存的进程访问请求;所述共享内存为包含设定数量字节单元的环形缓冲区;
进程类型获取模块,用于获取所述进程访问请求对应的进程类型;所述进程类型包括写进程和读进程;所述写进程中携带有待写入的数据;
数据写入模块,用于若确定进程类型为写进程,且确定所述共享内存的当前访问进程中不存在其他写进程,向所述共享内存写入所述待写入的数据,并针对当前写入的数据帧添加状态标识和序列码标识;所述状态标识用于指示写入的数据帧的状态;所述序列码标识用于指示所述写入的数据帧的序列号;
数据读取模块,用于若为读进程,且确定所述共享内存的当前访问进程中还存在写进程,则向所述写进程发送消息;所述消息用于触发所述写进程返回所述写进程正在写的最新的数据帧的位置;根据所述写进程正在写的最新的数据帧的位置,控制所述读进程访问所述最新的数据帧,并从所述最新的数据帧开始依次读取所述环形缓冲区中的数据帧。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010627537.6A CN111796948B (zh) | 2020-07-02 | 2020-07-02 | 一种共享内存访问方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010627537.6A CN111796948B (zh) | 2020-07-02 | 2020-07-02 | 一种共享内存访问方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111796948A CN111796948A (zh) | 2020-10-20 |
CN111796948B true CN111796948B (zh) | 2021-11-26 |
Family
ID=72810150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010627537.6A Active CN111796948B (zh) | 2020-07-02 | 2020-07-02 | 一种共享内存访问方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796948B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032162B (zh) * | 2021-03-23 | 2023-10-24 | 重庆兰德适普信息科技有限公司 | 一种基于共享内存备份机制的多进程通讯方法 |
CN112995610A (zh) * | 2021-04-21 | 2021-06-18 | 浙江所托瑞安科技集团有限公司 | 共享内存在多路视频监控中运用的方法 |
CN114071222B (zh) * | 2021-11-15 | 2023-07-25 | 深圳Tcl新技术有限公司 | 音视频数据共享装置及电子设备 |
CN114003413B (zh) * | 2021-12-30 | 2022-04-26 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
CN117331880A (zh) * | 2023-08-15 | 2024-01-02 | 北京城建智控科技股份有限公司 | 双核通信装置、方法及电子设备 |
CN118210635A (zh) * | 2024-05-20 | 2024-06-18 | 杭州沃镭智能科技股份有限公司 | 一种基于can总线的嵌入式内存共享实现方法及*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012069831A1 (en) * | 2010-11-24 | 2012-05-31 | Tte Systems Ltd | Method and arrangement for a multi-core system |
CN102541663A (zh) * | 2011-12-28 | 2012-07-04 | 创新科软件技术(深圳)有限公司 | 一种多进程使用共享内存进行通信的方法 |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信*** |
CN103645863A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 共享内存的数据读取方法和***、写入方法和*** |
CN106648939A (zh) * | 2016-12-30 | 2017-05-10 | 上海寰视网络科技有限公司 | 用于进程间资源共享的方法与设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662775B (zh) * | 2012-03-29 | 2016-05-11 | 北京奇虎科技有限公司 | 一种进程通信方法和装置 |
CN107229530A (zh) * | 2017-06-29 | 2017-10-03 | 上海联影医疗科技有限公司 | 进程间的通信方法、存储介质以及计算机设备 |
-
2020
- 2020-07-02 CN CN202010627537.6A patent/CN111796948B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012069831A1 (en) * | 2010-11-24 | 2012-05-31 | Tte Systems Ltd | Method and arrangement for a multi-core system |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信*** |
CN102541663A (zh) * | 2011-12-28 | 2012-07-04 | 创新科软件技术(深圳)有限公司 | 一种多进程使用共享内存进行通信的方法 |
CN103645863A (zh) * | 2013-12-12 | 2014-03-19 | 北京奇虎科技有限公司 | 共享内存的数据读取方法和***、写入方法和*** |
CN106648939A (zh) * | 2016-12-30 | 2017-05-10 | 上海寰视网络科技有限公司 | 用于进程间资源共享的方法与设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111796948A (zh) | 2020-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111796948B (zh) | 一种共享内存访问方法、装置、计算机设备和存储介质 | |
CN108449405B (zh) | 事件提醒方法、装置、计算机设备和存储介质 | |
CN113766035B (zh) | 一种业务受理及共识的方法及装置 | |
WO2019127916A1 (zh) | 基于分布式一致性协议实现的数据读写方法及装置 | |
WO2017114205A1 (zh) | 短链接处理方法、装置及服务器 | |
US20050015469A1 (en) | State migration in multiple NIC RDMA enabled devices | |
WO2019127915A1 (zh) | 基于分布式一致性协议实现的数据读取方法及装置 | |
CN111046310B (zh) | 页面处理方法、装置、服务器及计算机可读存储介质 | |
CN105653198A (zh) | 数据处理方法及装置 | |
CN111159233B (zh) | 分布式缓存方法、***、计算机设备以及存储介质 | |
CN115004673A (zh) | 消息推送方法、装置、电子设备及计算机可读介质 | |
CN110633168A (zh) | 一种分布式存储***的数据备份方法和*** | |
CN111490947A (zh) | 数据包发送方法、数据包接收方法、***、设备及介质 | |
CN114244790A (zh) | PCIe设备与主机设备的通信方法、***及设备 | |
CN113419973B (zh) | 一种报文转发方法及装置 | |
CN110910249A (zh) | 一种数据处理方法、装置、节点设备及存储介质 | |
CN111343252A (zh) | 基于http2协议的高并发数据传输方法及相关设备 | |
JP2012089948A (ja) | データ転送装置及びデータ転送方法 | |
CN111865716A (zh) | 一种端口拥塞检测方法、装置、设备及机器可读存储介质 | |
CN111092958A (zh) | 一种节点接入方法、装置、***及存储介质 | |
CN111669431B (zh) | 消息传输方法、装置、计算机设备和存储介质 | |
CN116074332A (zh) | 镜像管理方法、分布式***、电子设备及介质 | |
CN115934338A (zh) | 进程间的通信方法及装置 | |
CN111367921A (zh) | 数据对象的刷新方法及装置 | |
CN111651282B (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 |