G06F9/38 G06F3/06
1.一种数据读写的控制方法,其特征在于,包括:
响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位;
若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞应答除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求,应答所述其他进程发起读锁申请请求;
响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
2.根据权利要求1所述的控制方法,其特征在于,所述响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作,包括:
响应于所述写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含读标识位;
若所述读标识位为第三位值,则向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值,以使所述第一进程基于申请的写锁执行数据编辑操作;在所述写标识位处于所述第二位值时,阻塞应答其他进程发起预写锁申请请求、写锁申请请求以及读锁申请请求。
3.根据权利要求2所述的控制方法,其特征在于,在所述响应于所述写锁申请请求,确定所述目标数据的读写参量之后,还包括:
若所述读标识位为除所述第三位值外的其他位值,则基于所述读标识位确定当前执行读取操作的进程个数;
响应于执行读取操作的其他进程反馈的读锁释放指令,调整所述读标识位的位值,直到调整后的读标识位为所述第三位值时,则执行所述向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值。
4.根据权利要求1所述的控制方法,其特征在于,还包括:
响应于第二进程发起的对于所述目标数据的读锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
若所述写标识位为所述第一位值,则向所述第二进程反馈读同意指令,并增加所述读标识位,以使所述第二进程基于申请的读锁执行读取操作。
5.根据权利要求1所述的控制方法,其特征在于,还包括:
响应于第三进程发起的对于所述目标数据的写锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
若所述预写标识位以及写标识位为第一位值,且所述读标识位为第三位值,则向所述第三进程反馈写同意指令,并将所述写标识位设置为第二位值,以使所述第三进程对所述目标数据执行数据编辑操作。
6.根据权利要求1-5任一项所述的控制方法,其特征在于,在所述响应于第一进程发起的对于目标数据的预写锁申请请求之前,还包括:
若未确定所述数据编辑操作的元素地址,则通过所述第一进程发起所述预写锁申请请求;
若已确定所述数据编辑操作的元素地址,则通过所述第一进程发起写锁申请请求。
7.根据权利要求1-5任一项所述的控制方法,其特征在于,所述目标数据为B+树索引;所述数据编辑操作为对所述目标数据内的目标元素的删除操作;
在所述若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值之后,还包括:
通过所述第一进程查询所述目标元素在所述B+树索引内位置信息;
若在所述B+树索引内未查询到所述目标元素的所述位置信息,则通过所述第一进程释放申请的所述预写锁,并将所述预写标识位配置为所述第一位值;
若在所述B+树索引内查询到所述目标元素的所述位置信息,则通过所述第一进程发起所述写锁申请请求。
8.一种数据读写的控制装置,其特征在于,包括:
预写锁申请单元,用于响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位;
预写触发单元,用于若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求;
写锁申请单元,用于响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
9.一种电子设备,其特征在于,所述电子设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时如权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。
本发明属于数据处理技术领域,尤其涉及一种数据读写的控制方法及电子设备。
随着电子技术的不断发展,越来越多的信息通过电子化的形式存储,大大提高了信息编辑以及传递的效率。近年来随着云技术的应用,能够实现多人同时对同一数据的操作,也进一步提高了电子化数据的编辑效率。然而,多进程同时对同一数据进行操作时,虽然提高了数据编辑的效率,但也同时带来了新的问题,即不同进程间的写入操作会存在相互冲突的情况。
现有的数据读写的控制技术,为了确保编辑数据的准确性以及避免对同一数据的写入冲突,可以配置读写锁,以便对于同一数据而言有且只有一个写入操作,并且在写入操作时阻塞其他对于该数据的读取操作。然而,若某一数据的数据量较大,进行写入操作时需要消耗较长时间完成对编辑元素的寻址动作,而在寻址过程中阻塞读取操作,则大大降低了对于数据的读写效率,并发效率较低。
有鉴于此,本发明实施例提供了一种数据读写的控制方法及电子设备,以解决现有的数据读写的控制技术,若某一数据的数据量较大,进行写入操作时需要消耗较长时间完成对编辑元素的寻址动作,而在寻址过程中阻塞读取操作,则大大降低了对于数据的读写效率,并发效率较低的问题。
本发明实施例的第一方面提供了一种数据读写的控制方法,包括:
响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位;
若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞应答除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求,应答所述其他进程发起读锁申请请求;
响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
在第一方面的第一种可能的实现方式中,所述响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作,包括:
响应于所述写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含读标识位;
若所述读标识位为所述第三位值,则向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值,以使所述第一进程基于申请的写锁执行数据编辑操作;在所述写标识位处于所述第二位值时,阻塞应答其他进程发起预写锁申请请求、写锁申请请求以及读锁申请请求。
在第一方面的第一种可能的实现方式中,在所述响应于所述写锁申请请求,确定所述目标数据的读写参量之后,还包括:
若所述读标识位为除所述第三位值外的其他位值,则基于所述读标识位确定当前执行读取操作的进程个数;
响应于执行读取操作的其他进程反馈的读锁释放指令,调整所述读标识位的位值,直到调整后的读标识位为所述第三位值时,则执行所述向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值。
在第一方面的第一种可能的实现方式中,还包括:
响应于第二进程发起的对于所述目标数据的读锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
若所述写标识位为所述第一位值,则向所述第二进程反馈读同意指令,并增加所述读标识位,以使所述第二进程基于申请的读锁执行读取操作。
在第一方面的第一种可能的实现方式中,还包括:
响应于第三进程发起的对于所述目标数据的写锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
若所述预写标识位以及写标识位为第一位值,且所述读标识位为第三位值,则向所述第三进程反馈写同意指令,并将所述写标识位设置为第二位值,以使所述第三进程对所述目标数据执行数据编辑操作。
在第一方面的第一种可能的实现方式中,在所述响应于第一进程发起的对于目标数据的预写锁申请请求之前,还包括:
若未确定所述数据编辑操作的元素地址,则通过所述第一进程发起所述预写锁申请请求;
若已确定所述数据编辑操作的元素地址,则通过所述第一进程发起写锁申请请求。
在第一方面的第一种可能的实现方式中,所述目标数据为B+树索引;所述数据编辑操作为对所述目标数据内的目标元素的删除操作;
在所述若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值之后,还包括:
通过所述第一进程查询所述目标元素在所述B+树索引内位置信息;
若在所述B+树索引内未查询到所述目标元素的所述位置信息,则通过所述第一进程释放申请的所述预写锁,并将所述预写标识位配置为所述第一位值;
若在所述B+树索引内查询到所述目标元素的所述位置信息,则通过所述第一进程发起所述写锁申请请求。
在第一方面的一种可能的实现方式中,所述预写锁申请请求的优先级高于写锁申请请求的优先级;所述写锁申请请求的优先级高于读锁申请请求的优先级。
本发明实施例的第二方面提供了一种数据读写的控制装置,包括:
预写锁申请单元,用于响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位;
预写触发单元,用于若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求;
写锁申请单元,用于响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
本发明实施例的第三方面还提供了一种数据读写的控制装置,用于根据读写参量分配预写锁、写锁以及读锁,其中,读写参量包括:预写标识位、写标识位以及读标识位;
在所述预写标识位为第一位值时,允许应答线程发起的预写申请请求,以向发起预写申请请求的进程分配预写锁,并在给任一进程分配预写锁后,将所述预写标识位设置为第二位值;
在所述预写标识位为第二位值时,阻塞应答线程发起的预写申请请求以及写申请请求,允许应答线程启发的读申请请求。
在第三方面的一种可能的实现方式中,所述数据读写的控制装置还要用于:
在所述写标识以及所述预写锁均为第一位值时,允许应答线程发起的写申请请求,并在所述读标识位为第三位值时以向发起写申请请求的进程分配写锁,并在给任一进程分配写锁后,将所述写标识位设置为第二位值;
在所述写标识位为第二位值时,阻塞应答线程发起的预写申请请求、写申请请求以及读申请请求。
在第三方面的一种可能的实现方式中,所述数据读写的控制装置还用于:
在所述读标识位为第三位值时,允许应答线程发起的写申请请求;
在所述写标识位为第一位值时,允许应答进程发起的读申请请求,并向发起读申请请求的进程分配读锁,并根据分配的读锁个数配置读标识位。
本发明实施例的第三方面提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面的各个步骤。
本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现第一方面的各个步骤。
实施本发明实施例提供的一种数据读写的控制方法及电子设备具有以下有益效果:
本发明实施例通过在读写参量中在写标识位的基础上,添加有对应的预写标识位,并在线程需要执行先进行寻址的写入操作时,可以发起一个预写锁申请请求,在检测到预写标识位处于第一位值时,向该线程反馈预写同意指令,即向该线程申请得到预写锁,可以执行预写操作;在预写操作过程中,该线程可以完成寻址任务,并允许其他进程读取目标数据,并在寻址完成后,该进程可以发起写锁申请请求,并基于执行后续的数据编辑操作,即对目标数据进行写入操作,实现了对同一目标数据的并发操作。与现有的数据读写的控制技术相比,本申请在对数据进行写入操作之前,假如了预写阶段,进程可以通过预写锁完成寻址操作,并且在预写阶段允许其他读取操作,从而能够在避免写入操作间相互冲突的同时,还能够减少寻址过程中对于数据的独占时长,大大提高了数据的共享读取能力。
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明第一实施例提供的一种数据读写的控制方法的实现流程图;
图2是本发明一实施例提供的B+数索引的结构示意图;
图3是本发明第二实施例提供的一种数据读写的控制方法S103具体实现流程图;
图4是本发明一实施例提供的多线程并发的时序示意图;
图5是本发明第三实施例提供的一种数据读写的控制方法具体实现流程图;
图6是本发明第四实施例提供的一种数据读写的控制方法具体实现流程图;
图7是本发明第五实施例提供的一种数据读写的控制方法具体实现流程图;
图8是本发明第六实施例提供的一种数据读写的控制方法具体实现流程图;
图9是本发明一实施例提供的一种数据读写的控制装置的结构框图;
图10是本发明一实施例提供的一种电子设备的示意图。
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例通过在读写参量中在写标识位的基础上,添加有对应的预写标识位,并在线程需要执行先进行寻址的写入操作时,可以发起一个预写锁申请请求,在检测到预写标识位处于第一位值时,向该线程反馈预写同意指令,即向该线程申请得到预写锁,可以执行预写操作;在预写操作过程中,该线程可以完成寻址任务,并允许其他进程读取目标数据,并在寻址完成后,该进程可以发起写锁申请请求,并基于执行后续的数据编辑操作,即对目标数据进行写入操作,实现了对同一目标数据的并发操作,解决了数据读写的控制技术,若某一数据的数据量较大,进行写入操作时需要消耗较长时间完成对编辑元素的寻址动作,而在寻址过程中阻塞读取操作,则大大降低了对于数据的读写效率,并发效率较低的问题。
本申请实施例提供的异常请求的识别方法可以应用于智能手机、服务器、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、服务器等电子设备上。本申请实施例对电子设备的具体类型不作任何限制。特别地,该电子设备具体为一云端服务器,该云端服务器存储有至少一个共享数据,根据提供服务类型不同,上述云端服务器可以包括如云文档、云计算、云应用以及云内存等提供云服务的服务器。该服务器可以接收各个终端发起的对于目标数据的操作(若该云服务为云文档,则上述目标数据具体为一电子文档;若该云服务为云内容,则上述目标数据可以为对于确定内存的地址的索引表),服务器可以为不同终端发起的操作配置对应的进程,以实现共享目标数据的目的。
请参阅图1,图1示出了本发明第一实施例提供的数据读写的控制方法的实现流程图,详述如下:
在S101中,响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位。
在本实施例中,用户在需要对目标数据进行编辑时,如需要对目标数据内的某一元素进行修改、新增或删除时,可以通过对应的终端向电子设备发起一个预写锁申请请求。其中,电子设备可以为不同的终端配置一条进程,终端可以通过分配的进程对目标数据进行读取以及写入等操作,在该情况下,则电子设备具体是通过终端所分配的进程接收终端发起的请求,因此,在终端需要对目标数据进行预写操作时,可以通过与其对应的第一进程向电子设备发起预写申请请求。
在本实施例中,每个进程可以根据是否已确定所需写入元素的地址,来确定该进程是否需要执行预写操作。若某一进程已确定所需写入的元素的地址,则该进程可以直接执行写操作,而无需进行预写操作,在该情况下,第一进程可以发起一个写锁申请请求,以直接执行数据编辑操作;反之,若某一进程未确定时所需写入的元素的地址,即需要进行寻址,则该进程需要执行预写操作后,再执行写操作,基于此,第一进程需要发起预写锁申请请求,以在预写阶段确定所需写入的元素的地址,并在确定元素的地址后再申请写锁。
由于提供云服务的过程中,若目标数据的数据量较大,则寻址过程并非瞬时完成的,以提供共享内存服务为例,共享内容数据库配置有一基于B+树构建的索引表,各个进程可以通过B+树索引确定各个内存资源在上述B+树索引内对应的节点以及位置,才能够完成对于内存资源的寻址,因此,上述寻址过程耗时较大。
示例性地,图2示出了本申请一实施例提供的B+树的结构示意图。参见图2所示,对B+树的写入操作,无外乎就是插入元素和删除元素。根据B+树的性质,当进程需要向B+树的索引表内插入一个新元素时,则需要确定该新元素需要插入到哪个叶子节点(Leaf)的哪个位置上,这个过程是从树的根节点(Root)开始进行递归查,直至叶子级节点为止。假设插入的新元素为“55”,首先到根节点(即1号节点)上,通过比较,然后进入2号节点,再进入6号节点(查的路径见加粗箭头),通过比较发现该元素需要插入到6号节点的第二个位置上。在进程到插入位置后,才能将新元素插入合适叶子节点的正确位置上,插入元素后,如果叶子节点违反了B+树的平衡性质,则需要分裂成相邻的两个兄弟节点,分裂操作可能递归直至根节点,引起树结构发生变化。从B+树中删除元素时,同样需要先到元素所在的叶子节点及位置,到了才能在相应叶子节点中做删除操作,删除元素之后,如果叶子节点违反了B+树的平衡性质,则需要借调元素或与左右两边的兄弟节点进行合并,合并操作可能递归直至根节点,引起整个树结构发生变化。从以上的分析可以看出,无论是插入元素还是删除元素,在进程对B+树索引进行写入操作之前,若不确定该元素对应的节点位置,都存在一个从根节点到叶子节点递归查的过程,这个阶段只是一个纯粹的读数据过程,不会写入任何数据,即索引表并不会发生实际性修改,无需阻塞所有读操作。同时,在一个大型的B+树索引中查一个元素的耗时相对于在已经确定了节点地址的读取操作而言,所需的耗时完全不是一个量级的,即查操作比基于地址进行读取操作而言时间要多得多,因此,若在查阶段阻塞所有读取操作,则会大大降低了数据并发的能力。因此,为了解决上述问题,本实施例新加入了预写阶段,在需要确定元素地址时,进程可以向电子设备发起一个预写锁申请请求,以便在预写锁阶段执行所需编辑的元素寻址操作。
在本实施例中,该电子设备可以提供的读写参量内包含有预写标识位以及写标识位。其中,预写标识位可以表示为pw,而写标识位可以表示为write,在电子设备接收到第一进程发起的预写锁申请请求时,需要确定当前是否存在其他进程占用了预写锁或者写锁,则需要确定预写标识位以及写标识位对应的位值,即确定上述读写参量的状态。
在本实施例中,预写标识位以及写标识位具体均为互斥参量,其值有且只有两种取值,即第一位值以及第二位值,因此,预写锁以及写锁均为互斥锁,可以表示为:volatileunsigned charpw;volatile unsigned charwrite。
在一种可能的实现方式中,上述读写参量还包含读标识位,则上述读写参量具体可以表示为:
其中,上述读写参量有3个标识位:
预写标识位pw,即预写锁,具体为一写锁互斥变量,被设置为1时,排斥其它写操作进入,但允许其他进程共享读;
写标识位write,即写锁,具体为一读锁互斥变量,被设置为1时,排斥其他任何进程进行读和写两种操作;
read:读锁记数器,记录当前持有读锁的进程(或线程)数。
在S102中,若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞应答除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求,应答所述其他进程发起读锁申请请求。
在本实施例中,电子设备若检测到目标数据的读写参量中,预写标识位为第一位值,则表示当前的预写锁可用,此时可以允许第一进程执行预写操作,向该第一进程反馈一个预写同意指令,即将预写锁发送给第一进程,第一进程可以根据申请得到的预写锁执行预写操作,其中,预写操作具体为对所需编辑元素进行寻址的操作,具体过程可以参见S101的相关描述。
在本实施例中,电子设备为了避免其他进程再执行预写操作以及写操作,在该情况下,会将上述读写参量中的预写标识位配置为第二位值,即进行预写锁的加锁操作,在预写标识位配置为第二位值时,会阻塞应答其他线程的预写申请请求以及写申请请求,而是知道上述预写标识位重新配置为第一位值时,才根据申请的先后次序,依次应答其他线程发起的预写申请请求以及写申请请求。
在一种可能的实现方式中,而对于预写锁以及写锁对应的加锁以及解锁操作,可以表示为:lock(c_mutex_t*)和unlock(c_mutex_t*),其中*号具体可以替换为预写锁以及写锁对应的标识,利用函数__sync_bool_compare_and_swap来实现加锁功能,加锁成功之后c_mutex_t的值为非0(即第二位值),用函数__sync_lock_release来实现释放锁功能,释放锁之后c_mutex_t的值为0(即第一位值)。
在S103中,响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
在本实施例中,第一进程在执行完成预写操作后,可以向电子设备发起一个写锁申请请求,此时,第一进程已经完成了元素的寻址操作,可以直接对元素进行编辑,可以对目标数据进行数据编辑,如对目标数据内的任一元素进行修改、删除,或对目标数据内增加新的元素。若该目标数据为一B+树索引,则可以对该B+树索引内的节点进行删除、修改,或增加新的节点等。
以上可以看出,本发明实施例提供的一种数据读写的控制方法通过在读写参量中在写标识位的基础上,添加有对应的预写标识位,并在线程需要执行先进行寻址的写入操作时,可以发起一个预写锁申请请求,在检测到预写标识位处于第一位值时,向该线程反馈预写同意指令,即向该线程申请得到预写锁,可以执行预写操作;在预写操作过程中,该线程可以完成寻址任务,并允许其他进程读取目标数据,并在寻址完成后,该进程可以发起写锁申请请求,并基于执行后续的数据编辑操作,即对目标数据进行写入操作,实现了对同一目标数据的并发操作。与现有的数据读写的控制技术相比,本申请在对数据进行写入操作之前,假如了预写阶段,进程可以通过预写锁完成寻址操作,并且在预写阶段允许其他读取操作,从而能够在避免写入操作间相互冲突的同时,还能够减少寻址过程中对于数据的独占时长,大大提高了数据的共享读取能力。
图3示出了本发明第二实施例提供的一种数据读写的控制方法S102的具体实现流程图。参见图3,相对于图1所述实施例,本实施例提供的一种数据读写的控制方法S103包括:S1031~S1034,具体详述如下:
进一步地,所述响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作,包括:
在S1031中,响应于所述写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含读标识位。
在本实施例中,由于第一进程在执行预写操作的过程中,电子设备可以允许其他进程执行读操作,而为了避免数据冲突,在目标数据读取的过程中,是不允许对目标数据进行修改的,避免读取得到的值与修改后的值不一致。基于此,第一进程在完成预写操作后发起写锁申请请求时,电子设备需要重新读取目标数据的读写参量。其中,该读写参量中包含有读标识位。
在本实施例中,若该读标识位为第三位值的情况下,则表示当前并没有其他进程对目标数据执行读取操作,即并未有任何进程有读锁,在该情况下,则执行S1032的操作;反之,若该读标识位为第三位置外的其他位值,则表示当前存在进程对目标数据执行读取操作,此时,执行S1033的操作。
在一种可能的实现方式中,在电子设备接收到第一进程发起的写锁申请请求时,会阻塞应答其他进程发起的读锁申请请求,即不允许其他进程再执行读操作。
在S1032中,若所述读标识位为所述第三位值,则向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值,以使所述第一进程基于申请的写锁执行数据编辑操作;在所述写标识位处于所述第二位值时,阻塞应答其他进程发起预写锁申请请求、写锁申请请求以及读锁申请请求。
在本实施例中,若读标识位为为第三位值,则表示当前并未有其他进程执行读取操作,该第三位值可以为0,或其他预设的数值,此时,电子设备可以向第一进程反馈写入同意指令,即对写锁进行加锁操作,将写标识位配置为第二位值。第一进程在接收到写入同意指令后,可以基于申请的写锁对目标数据进行数据编辑操作。在写标识位为第二位值的状态下,会阻塞应答所有对目标数据的预写申请请求、写申请请求以及读锁申请请求,即为写独占操作。
进一步地,在所述响应于所述写锁申请请求,确定所述目标数据的读写参量之后,还包括:
在S1033中,若所述读标识位为除所述第三位值外的其他位值,则基于所述读标识位确定当前执行读取操作的进程个数。
在本实施例中,若该读标识位为除第三位值外的其他位值,则表示当前存在其他进程对于目标数据执行读取操作,需要等待所有读操作完成后,才能够执行写入操作。在该情况下,电子设备可以根据读标识位确定当前正在执行读取操作的进程个数。
在S1034中,响应于执行读取操作的其他进程反馈的读锁释放指令,调整所述读标识位的位值,直到调整后的读标识位为所述第三位值时,则执行所述向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值。
在本实施例中,在其他进程执行完成读取操作后,可以向电子设备发起一个读锁释放指令,电子设备可以根据该读锁释放指令对读锁进行解锁操作,减少该读取标识位的位值,若电子设备检测到调整后的读标识位变更为第三位值时,则表示所有进程已经读取完毕,此时可以执行写入操作,此时,可以向第一进程反馈一个写入同意指令,以便第一进程根据申请的写锁执行数据编辑操作。
在本实施例中,所述预写锁申请请求的优先级高于写锁申请请求的优先级;所述写锁申请请求的优先级高于读锁申请请求的优先级。
示例性地,图4示出了本申请一实施例提供的多线程并发的时序示意图。参见图4所示,电子设备内包含有4个进程,根据4个进程对于目标数据的读写操作,可以变更对应的读写参量(即读写锁)内各个标识位的位值,通过该读写锁保护目标数据,比如B+树索引结构。在多进程(或线程)并发环境中,无论是对目标数据进行读操作还是写操作,都需要先向受其保护的锁进行申请,只有获得锁的允许之后才能访问资源。如图4给出的例子所示,进程1(可以相当于上述实施例中的第一进程)和进程3是需要对目标数据进行数据编辑操作(其中,进程1未确定元素的地址,而进程3以确定了元素的地址),进程2和进程4是需要读取数据的。总共有9个读写操作序列,其时序对应于右边的标记的数字0~9。
下面对图中的操作时序进行分析:
1)进程1需要对目标数据进行数据编辑时,由于未确定元素地址,因此向电子设备申请“预写锁”,即发起预写锁申请请求,此时由于没有其它任何进程持有锁(即读写参量中预写锁为第一位值),因此进程1申请“预写锁”成功,进入预写状态。
2)进程2需要读取数据,向电子设备申请“读锁”,由于此时没有其它进程持有独占写锁,即写标识位为第一位值,虽然进程1持有预写锁,此时仍然允许共享读,因此进程2获取“读锁”成功,进入读数据状态,电子设备的读锁数量为1,即将读标识位配置为1。
3)进程3需要对目标数据进行数据编辑时,由于已确定元素地址,因此可以直接向电子设备申请“写锁”,即发起写锁申请请求,但此时进程1持有“预写锁”,因此进程3不能立即获取写锁,进入等待状态。
4)进程1预写(读取相关数据)完成,需要正式对目标数据进行编辑,向电子设备申请“写锁”,即发起写锁申请请求,即由预写锁转独占写锁,但此时进程2持有读锁,读锁数量大于0,即读标识位并非第三位值,所以进程1不能立即获取写锁,进入等待状态。
5)进程2释放读锁,此时电子设备中的读锁数量清零,即读标识位重新变更为第三位值,进程1和进程3都处于等待状态,但进程1已经持有预写锁,优先级更高,所以进程1获得独占写锁,进入写状态。
6)进程4向电子设备申请“读锁”,但此时进程1持有独占写锁,因此进程4不能立即获取读锁,进入等待状态。
7)进程1释放写锁,此时进程3和进程4都处于等待状态,但该写锁是优先级高于读锁,所以进程3优先获得写锁,进入写状态。
8)进程3释放写锁,此时只有进程4处于等待状态,因此进程4获得读锁,进入读状态,电子设备中读锁数量为1。
9)进程4释放读锁,电子设备中读锁数量清零。
在本申请实施例中,在响应进程的写入操作之前,需要先确定当前是否存在进程执行读取操作,从而能够确保读取操作的准确性的同时,也能够实现在预写阶段的读共享,提高了数据的并发性。
图5示出了本发明第三实施例提供的一种数据读写的控制方法的具体实现流程图。参见图5,相对于图1所述实施例,本实施例提供的一种数据读写的控制方法还包括S501~S502,具体详述如下:
在S501中,响应于第二进程发起的对于所述目标数据的读锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位。
在本实施例中,在需要读取目标数据时,第二进程可以向电子设备发起一个读锁申请请求,此时,电子设备可以确定目标数据的读写参量,判断当前是否允许读取操作。
在S502中,若所述写标识位为所述第一位值,则向所述第二进程反馈读同意指令,并增加所述读标识位,以使所述第二进程基于申请的读锁执行读取操作。
在本实施例中,若该写标识位为第一位值,则表示当前并不存在任何独占写锁,不论是否存在预写锁,均可以执行读取操作,此时,可以向第二进程反馈读同意指令,即第二进程获取得到读锁,可以对目标数据执行读取操作,并增加读标识位的位值,以记录当前执行读取操作的进程个数。
示例性地,若目标数据为一B+树索引,则B+树中读取元素的预写锁实现过程具体如下:
a)首先第二进程向电子设备申请对B+树加读锁,即读锁申请请求;
b)电子设备申请读锁成功之后(读标识位增1,此时写标识位为第一位值),即第二进程开始对B+树进行检索,从根节点开始,查元素所在的叶子节点和位置;
c)第二进程查完成之后(即读取完成后),无论结果如何,都释放读锁(锁的read减1),流程结束。
在本申请实施例中,通过在接收到读锁申请请求时,读取写标识位的位值,判断当前是否存在进程执行数据编辑操作,从而能够确保读取操作的准确性。
图6示出了本发明第四实施例提供的一种数据读写的控制方法的具体实现流程图。参见图6,相对于图1所述实施例,本实施例提供的一种数据读写的控制方法还包括:S601~S602,具体详述如下:
在S601中,响应于第三进程发起的对于所述目标数据的写锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位。
在S602中,若所述预写标识位以及写标识位为第一位值,且所述读标识位为第三位值,则向所述第三进程反馈写同意指令,并将所述写标识位设置为第二位值,以使所述第三进程对所述目标数据执行数据编辑操作。
在本实施例中,第三进程已经确定了目标数据中所需编辑的元素的地址时,可以向电子设备发起写锁申请请求,此时,电子设备需要确定当前是否存在进程持有预写锁以及独占写锁,以及确定是否存在进程持有读锁,即读写参量中,预写标识位以及写标识位为第一位值,且所述读标识位为第三位值,若均满足上述条件,则响应该写锁申请请求,同意第三进程执行写操作。反之,若不满足任一上述条件,则需要进行等待。
图7示出了本发明第五实施例提供的一种数据读写的控制方法的具体实现流程图。参见图7,相对于图1~6任一项所述实施例,本实施例提供的一种数据读写的控制方法还包括:S701~S702,具体详述如下:
在所述响应于第一进程发起的对于目标数据的预写锁申请请求之前,还包括:
在S701中,若未确定所述数据编辑操作的元素地址,则通过所述第一进程发起所述预写锁申请请求;
在S702中,若已确定所述数据编辑操作的元素地址,则通过所述第一进程发起写锁申请请求。
在本实施例中,第一进程可以根据是否确定元素地址,来判断是直接发起写锁申请请求,或是预写锁申请请求。由于确定元素地址需要一定的寻址时间,在寻址过程中无需申请独占写锁,而是申请预写锁即可,能够提高数据读共享的能力。
图8示出了本发明第六实施例提供的一种数据读写的控制方法的具体实现流程图。参见图8,相对于图1~6任一项所述实施例,本实施例提供的一种数据读写的控制方法还包括:S801~S803,具体详述如下:
进一步地,所述目标数据为B+树索引;所述数据编辑操作为对所述目标数据内的目标元素的删除操作;
在所述若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值之后,还包括:
在S801中,通过所述第一进程查询所述目标元素在所述B+树索引内位置信息;
在S802中,若在所述B+树索引内未查询到所述目标元素的所述位置信息,则通过所述第一进程释放申请的所述预写锁,并将所述预写标识位配置为所述第一位值;
在S803中若在所述B+树索引内查询到所述目标元素的所述位置信息,则通过所述第一进程发起所述写锁申请请求。
在本实施例中,上述数据编辑操作具体为对于B+树索引内的节点进行删除,在该情况下,上述实现过程具体可以包含以下步骤:
a)第一进程可以向电子设备申请对B+树加预写锁,即预写锁申请请求。
b)第一进程在接收到电子设备反馈的预写锁申请成功指令后(电子设备会将读写参量中预写标识pw置为1,此时写标识位为0),即开始对B+树进行检索,从根节点开始,查要删除的元素所在的叶子节点和位置,即预写操作。
c)第一进程如果查失败,即元素不存在,则释放预写锁,流程终止,否则进入d)步骤。
d)第一进程若查得到目标元素的位置信息,则向电子设备申请将预写锁转成独占写锁。
e)第一进程申请写锁成功之后(锁的write置为1,此时pw为1,read为0),从相应叶子节点的位置上删除元素,并完成可能的节点合并操作。
f)释放写锁(读写参量中的pw和write都置为0),删除元素流程完成。
与上述删除节点相比,则插入元素的过程具体包含以下步骤:
a)第一进程首先向电子设备申请对B+树加预写锁;
b)第一进程在向电子设备申请预写锁成功之后(读写参量中的pw置为1,此时write为0),即开始对B+树进行检索,从根节点开始,查新元素需要插入的合适的叶子节点和位置,即执行预写操作;
c)第一进程到叶子节点和位置后,即目标元素的位置信息,申请将预写锁转成独占写锁。
d)第一进程申请写锁成功之后(读写参量中的write置为1,此时pw为1,read为0),将元素写入相应节点及位置,并完成可能的节点分裂操作。
e)第一进程释放写锁(读写参量中的pw和write都置为0),插入元素流程完成。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
图9示出了本发明一实施例提供的一种数据读写的控制装置的结构框图,该数据读写的控制装置包括的各单元用于执行图1对应的实施例中的各步骤。具体请参阅图1与图1所对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。
参见图9,所述数据读写的控制装置包括:
预写锁申请单元91,用于响应于第一进程发起的对于目标数据的预写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含预写标识位以及写标识位;
预写触发单元92,用于若所述预写标识位为第一位值,则向所述第一进程反馈预写同意指令,并将所述预写标识位设置为第二位值,以使所述第一进程基于申请的预写锁执行预写操作;在所述预写标识位处于所述第二位值时,阻塞除所述第一进程外的其他进程发起的预写锁申请请求以及写锁申请请求;
写锁申请单元93,用于响应于所述第一进程发起的对于所述目标数据的写锁申请请求,向所述目标数据执行数据编辑操作;所述写锁申请请求是在所述第一进程执行完成所述预写操作后发起的。
可选地,所述预写触发单元92包括:
写锁申请请求响应单元,用于响应于所述写锁申请请求,确定所述目标数据的读写参量;所述读写参量包含读标识位;
同意写锁执行单元,用于若所述读标识位为所述第三位值,则向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值,以使所述第一进程基于申请的写锁执行数据编辑操作;在所述写标识位处于所述第二位值时,阻塞应答其他进程发起预写锁申请请求、写锁申请请求以及读锁申请请求。
可选地,所述控制装置还包括:
读操作等待单元,用于若所述读标识位为除所述第三位值外的其他位值,则基于所述读标识位确定当前执行读取操作的进程个数;
读操作等待完成单元,用于响应于执行读取操作的其他进程反馈的读锁释放指令,调整所述读标识位的位值,直到调整后的读标识位为所述第三位值时,则执行所述向所述第一进程反馈写入同意指令,并将所述写标识位为第二位值。
可选地,所述控制装置还包括:
读锁申请单元,用于响应于第二进程发起的对于所述目标数据的读锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
读锁申请同意单元,用于若所述写标识位为所述第一位值,则向所述第二进程反馈读同意指令,并增加所述读标识位,以使所述第二进程基于申请的读锁执行读取操作。
可选地,所述控制装置还包括:
写锁申请单元,用于响应于第三进程发起的对于所述目标数据的写锁申请请求,确定所述目标数据的所述读写参量;所述读写参量还包含读标识位;
写锁申请同意单元,用于若所述预写标识位以及写标识位为第一位值,且所述读标识位为第三位值,则向所述第三进程反馈写同意指令,并将所述写标识位设置为第二位值,以使所述第三进程对所述目标数据执行数据编辑操作。
可选地,所述控制装置还包括:
元素地址待定单元,用于若未确定所述数据编辑操作的元素地址,则通过所述第一进程发起所述预写锁申请请求;
元素地址已知单元,用于若已确定所述数据编辑操作的元素地址,则通过所述第一进程发起写锁申请请求。
可选地,所述目标数据为B+树索引;所述数据编辑操作为对所述目标数据内的目标元素的删除操作;
所述控制装置还包括:
位置信息查询单元,用于通过所述第一进程查询所述目标元素在所述B+树索引内位置信息;
预写锁释放单元,用于若在所述B+树索引内未查询到所述目标元素的所述位置信息,则通过所述第一进程释放申请的所述预写锁,并将所述预写标识位配置为所述第一位值;
位置确认单元,用于若在所述B+树索引内查询到所述目标元素的所述位置信息,则通过所述第一进程发起所述写锁申请请求。
本申请的另一实施例还提供了一种数据读写的控制装置,用于根据读写参量分配预写锁、写锁以及读锁,其中,读写参量包括:预写标识位、写标识位以及读标识位;
在所述预写标识位为第一位值时,允许应答线程发起的预写申请请求,以向发起预写申请请求的进程分配预写锁,并在给任一进程分配预写锁后,将所述预写标识位设置为第二位值;
在所述预写标识位为第二位值时,阻塞应答线程发起的预写申请请求以及写申请请求,允许应答线程启发的读申请请求。
所述数据读写的控制装置还要用于:
在所述写标识以及所述预写锁均为第一位值时,允许应答线程发起的写申请请求,并在所述读标识位为第三位值时以向发起写申请请求的进程分配写锁,并在给任一进程分配写锁后,将所述写标识位设置为第二位值;
在所述写标识位为第二位值时,阻塞应答线程发起的预写申请请求、写申请请求以及读申请请求。
所述数据读写的控制装置还用于:
在所述读标识位为第三位值时,允许应答线程发起的写申请请求;
在所述写标识位为第一位值时,允许应答进程发起的读申请请求,并向发起读申请请求的进程分配读锁,并根据分配的读锁个数配置读标识位。
因此,本发明实施例提供的电子设备同样可以通过在读写参量中在写标识位的基础上,添加有对应的预写标识位,并在线程需要执行先进行寻址的写入操作时,可以发起一个预写锁申请请求,在检测到预写标识位处于第一位值时,向该线程反馈预写同意指令,即向该线程申请得到预写锁,可以执行预写操作;在预写操作过程中,该线程可以完成寻址任务,并允许其他进程读取目标数据,并在寻址完成后,该进程可以发起写锁申请请求,并基于执行后续的数据编辑操作,即对目标数据进行写入操作,实现了对同一目标数据的并发操作。与现有的数据读写的控制技术相比,本申请在对数据进行写入操作之前,假如了预写阶段,进程可以通过预写锁完成寻址操作,并且在预写阶段允许其他读取操作,从而能够在避免写入操作间相互冲突的同时,还能够减少寻址过程中对于数据的独占时长,大大提高了数据的共享读取能力。
图10是本发明另一实施例提供的一种电子设备的示意图。如图10所述,该实施例的电子设备10包括:处理器100、存储器101以及存储在所述存储器101中并可在所述处理器100上运行的计算机程序102,例如数据读写的控制程序。所述处理器100执行所述计算机程序102时实现上述各个数据读写的控制方法实施例中的步骤,例如图1所述的S101至S103。或者,所述处理器100执行所述计算机程序102时实现上述各装置实施例中各单元的功能,例如图9所述模块91至93功能。
示例性的,所述计算机程序102可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器101中,并由所述处理器100执行,以完成本发明。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序102在所述电子设备10中的执行过程。
所述电子设备可包括,但不仅限于,处理器100、存储器101。本领域技术人员可以理解,图10仅仅是电子设备10的示例,并不构成对电子设备10的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器100可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器101可以是所述电子设备10的内部存储单元,例如电子设备10的硬盘或内存。所述存储器101也可以是所述电子设备10的外部存储设备,例如所述电子设备10上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器101还可以既包括所述电子设备10的内部存储单元也包括外部存储设备。所述存储器101用于存储所述计算机程序以及所述电子设备所需的其他程序和数据。所述存储器101还可以用于暂时地存储已经输出或者将要输出的数据。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
本文发布于:2023-04-13 14:32:30,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86067.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |