数据访问方法、装置及设备与流程

文档序号:18642188发布日期:2019-09-11 23:35阅读:177来源:国知局
本公开实施例涉及计算机
技术领域
:,尤其涉及一种数据访问方法、装置及设备。
背景技术
::临界区指的是一个访问共用资源的程序片段,在同一时刻,最多允许一个线程访问临界区,即,对临界区的访问为互斥的。在多数设备中,可以基于设备的硬件实现互斥锁,例如,可以基于设备的中央处理器(centralprocessingunit,cpu)的原子性、中断以及内存总线机制等实现互斥锁。互斥锁适用于同一进程中多个线程,即,互斥锁可以防止同一进程中的多个线程同时访问临界区,然而,互斥锁无法防止多个进程同时访问临界区,可能使得多个进程同时访问临界区,使得数据访问的出错,进而导致数据访问的可靠性低。技术实现要素:本公开实施例提供一种数据访问方法、装置及设备,提高了数据访问的可靠性。第一方面,本公开实施例提供一种数据访问方法,包括:在第一线程访问临界区之前,在第一共享区域中写入所述第一线程对应的随机数,所述第一共享区域可存储一个随机数;在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数,所述第二共享区域可存储一个随机数;根据所述第一共享区域中当前时刻的随机数和所述第二共享区域中的随机数,确定所述第一线程是否访问所述临界区。在一种可能的实施方式中,根据所述第一共享区域中当前时刻的随机数和所述第二共享区域中的随机数,确定所述第一线程是否访问所述临界区,包括:判断所述第一共享区域中当前时刻的随机数是否为所述第一线程对应的随机数;若是,则确定所述第一线程访问所述临界区;若否,则根据所述第二共享区域中的随机数确定所述第一线程是否访问所述临界区。在一种可能的实施方式中,根据所述第二共享区域中的随机数确定所述第一线程是否访问所述临界区,包括:在预设时长之后,判断所述第二共享区域中的随机数是否为所述第一线程对应的随机数,所述预设时长大于预设的对临界区的访问时长;若是,则确定所述第一线程访问所述临界区;若否,则确定所述第一线程不访问所述临界区。在一种可能的实施方式中,在确定所述第一线程访问所述临界区之后,所述方法还包括:控制所述第一线程访问所述临界区;在所述第一线程访问所述临界区结束之后,删除所述第二共享区域中的随机数,或者将所述第二共享区域中的随机数更新为所述预设值。在一种可能的实施方式中,在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数,包括:执行判断操作,所述判断操作包括:判断所述第二共享区域是否为空,或者所述第二共享区域中的随机数是否为预设值;在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数;在第二共享区域不是空,且所述第二共享区域中的随机数不是预设值时,则重复执行所述判断操作,直至所述第二共享区域为空、或者所述第二共享区域中的随机数为预设值。在一种可能的实施方式中,执行判断操作之前,还包括:在第一共享区域中写入所述第一线程对应的随机数。在一种可能的实施方式中,在第一共享区域中写入所述第一线程对应的随机数,包括:删除所述第一共享区域中的随机数,并在所述第一共享区域中写入所述第一线程对应的随机数;或者,在所述第一共享区域中写入所述第一线程对应的随机数,所述第一线程对应的随机数覆盖所述第一共享区域中随机数。在一种可能的实施方式中,所述第一共享区域中包括第一参数,所述第一共享区域中的随机数为所述第一参数的值;在第一共享区域中写入第一线程对应的随机数,包括:将所述第一共享区域中的所述第一参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第二共享区域中包括第二参数,所述第二共享区域中的随机数为所述第二参数的值;在第二共享区域中写入所述第一线程对应的随机数,包括:将所述第二共享区域中的所述第二参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第一共享区域和所述第二共享区域为同一共享区域,所述第一参数和所述第二参数为所述同一共享区域中的参数。第二方面,本公开实施例提供一种数据访问装置,包括写入模块和确定模块,其中,所述写入模块用于,在第一线程访问临界区之前,在第一共享区域中写入所述第一线程对应的随机数,所述第一共享区域可存储一个随机数;所述写入模块还用于,在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数,所述第二共享区域可存储一个随机数;所述确定模块用于,根据所述第一共享区域中当前时刻的随机数和所述第二共享区域中的随机数,确定所述第一线程是否访问所述临界区。在一种可能的实施方式中,所述确定模块具体用于:判断所述第一共享区域中当前时刻的随机数是否为所述第一线程对应的随机数;若是,则确定所述第一线程访问所述临界区;若否,则根据所述第二共享区域中的随机数确定所述第一线程是否访问所述临界区。在一种可能的实施方式中,所述确定模块具体用于:在预设时长之后,判断所述第二共享区域中的随机数是否为所述第一线程对应的随机数,所述预设时长大于预设的对临界区的访问时长;若是,则确定所述第一线程访问所述临界区;若否,则确定所述第一线程不访问所述临界区。在一种可能的实施方式中,所述装置还包括控制模块和删除模块,其中,所述控制模块用于,在确定所述第一线程访问所述临界区之后,控制所述第一线程访问所述临界区;所述删除模块用于,在所述第一线程访问所述临界区结束之后,删除所述第二共享区域中的随机数,或者将所述第二共享区域中的随机数更新为所述预设值。在一种可能的实施方式中,所述写入模块具体用于:执行判断操作,所述判断操作包括:判断所述第二共享区域是否为空,或者所述第二共享区域中的随机数是否为预设值;在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数;在第二共享区域不是空,且所述第二共享区域中的随机数不是预设值时,则重复执行所述判断操作,直至所述第二共享区域为空、或者所述第二共享区域中的随机数为预设值。在一种可能的实施方式中,所述写入模块还用于,在所述写模块执行判断操作之前,在第一共享区域中写入所述第一线程对应的随机数。在一种可能的实施方式中,所述写入模块具体用于:删除所述第一共享区域中的随机数,并在所述第一共享区域中写入所述第一线程对应的随机数;或者,在所述第一共享区域中写入所述第一线程对应的随机数,所述第一线程对应的随机数覆盖所述第一共享区域中随机数。在一种可能的实施方式中,所述第一共享区域中包括第一参数,所述第一共享区域中的随机数为所述第一参数的值;所述写入模块具体用于:将所述第一共享区域中的所述第一参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第二共享区域中包括第二参数,所述第二共享区域中的随机数为所述第二参数的值;所述写入模块具体用于:将所述第二共享区域中的所述第二参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第一共享区域和所述第二共享区域为同一共享区域,所述第一参数和所述第二参数为所述同一共享区域中的参数。第三方面,本公开实施例提供一种电子设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面任一项所述的数据访问方法。第三方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面任一项所述的数据访问方法。本公开实施例提供的数据访问方法、装置及设备,在第一线程访问临界区之前,在第一共享区域中写入第一线程对应的随机数,在第二共享区域为空、或者第二共享区域中的随机数为预设值时,在第二共享区域中写入第一线程对应的随机数,根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,确定第一线程是否访问临界区,进而使得在同一时刻,只有一个线程可以访问临界区,提高了数据访问的可靠性。附图说明为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本公开实施例提供的系统架构图;图2为本公开实施例提供的一种数据访问方法的流程示意图;图3a为本公开实施例提供的一种向第一共享区域写随机数的示意图;图3b为本公开实施例提供的另一种向第一共享区域写随机数的示意图;图4a为本公开实施例提供的一种向第二共享区域写随机数的示意图;图4b为本公开实施例提供的另一种向第二共享区域写随机数的示意图;图5为本公开实施例提供的另一种数据访问方法的流程示意图;图6a为本公开实施例提供的一种数据访问过程示意图;图6b为本公开实施例提供的另一种数据访问过程示意图;图6c为本公开实施例提供的又一种数据访问过程示意图;图6d为本公开实施例提供的再一种数据访问过程示意图;图6e为本公开实施例提供的另一种数据访问过程示意图;图6f为本公开实施例提供的又一种数据访问过程示意图;图7为本公开实施例提供的一种数据访问装置的结构示意图;图8为本公开实施例提供的另一种数据访问装置的结构示意图;图9为本公开实施例提供的电子设备的结构示意图。具体实施方式为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。图1为本公开实施例提供的系统架构图。请参见图1,包括多个进程、临界区、第一共享区域和第二共享区域。多个进程可以为电子设备(例如,手机、电脑、服务器等)中不同应用程序对应的进程,例如,一个应用程序可以对应一个进程。一个进程可以对应一个或多个线程,多个进程可以并行执行,即,不同进程中的线程可以并行执行。任意进程中的线程均可以访问临界区,且在同一时刻,只允许一个线程访问临界区,其中,线程通常在处理器的控制下对临界区进行访问。在任意一个线程访问临界区之前,需要依次在第一共享区域和第二共享区域中写入该线程对应的随机数,第一共享区域中最多包括一个随机数,第二共享区域中最多包括一个随机数。在实际应用过程中,可能存在多个线程同时有访问临界区的需求,相应的,可能会同时向第一共享区域中写多个线程对应的随机数,或者同时向第二共享区域中写多个线程对应的随机数,在该种情况下,只有一个随机数可以成功的写入至第一共享区域,也只有一个随机数可以成功的写入第二共享区域。针对任意一个线程,在向第一共享区域和第二共享区域中写完随机数之后,根据第一共享区域中的随机数和第二共享区域中的随机数确定是否允许该线程访问临界区,进而使得在同一时刻,只有一个线程可以访问临界区,提高了数据访问的可靠性。下面,通过具体实施例对本申请所示的技术方案进行详细说明。需要说明的是,下面几个具体实施例可以相互结合,对于相同或相似的内容,在不同的实施例中不再进行重复说明。图2为本公开实施例提供的一种数据访问方法的流程示意图。请参见图2,该方法可以包括:s201、在第一线程访问临界区之前,在第一共享区域中写入第一线程对应的随机数。本公开实施例的执行主体为电子设备,或者设置在电子设备中的数据访问装置。可选的,电子设备可以为手机、电脑、电视、服务器等设备。可选的,数据访问装置可以通过软件实现,也可以通过软件和硬件的结合实现。可选的,电子设备可以包括多个进程,该多个进程可以并行执行。第一线程可以为任意进程中的任意一个线程。第一共享区域可以为电子设备中的内存区域、硬盘区域、存储设备(例如寄存器等)等。第一共享区域中可存储一个随机数,即,在一个时刻,第一共享区域中只有一个随机数。可选的,第一共享区域的存储空间的大小大于或等于一个随机数的大小。当第一共享区域的存储空间的大小大于一个随机数的大小时,还可以在第一共享区域中存储第一参数,在向第一共享区域中写入随机数时,可以是将该第一参数的值设置为该随机数。相应的,第一共享区域中的随机数是指第一参数的值。可选的,第一线程对应的随机数可以为固定的,例如,可以预先为每个进程中的每个线程分配随机数。第一线程在不同时刻访问临界区时对应的随机数均相同。可选的,第一线程对应的随机数可以为可变的,例如,在第一线程访问临界区之前,可以生成一个随机数。第一线程在不同时刻访问临界区时生成的随机数可能不同。可选的,可以通过至少如下两种可行的实现方式在第一共享区域中写入第一线程对应的随机数:一种可行的实现方式:删除第一共享区域中的随机数,并在第一共享区域中写入第一线程对应的随机数。在该种可行的实现方式中,在向第一共享区域中写入第一线程对应的随机数之前,由于删除了第一共享区域中的随机数,因此,可以保证第一共享区域中只包括一个随机数。另一种可行的实现方式:在第一共享区域中写入第一线程对应的随机数,第一线程对应的随机数覆盖第一共享区域中随机数。在该种可行的实现方式中,在向第一共享区域中写入第一线程对应的随机数时,第一线程对应的随机数覆盖第一共享区域中随机数,因此,可以保证第一共享区域中只包括一个随机数。再一种可行的实现方式:第一共享区域中包括第一参数,第一共享区域中的随机数为第一参数的值。相应的,将第一共享区域中的第一参数的值设置为第一线程对应的随机数。在该种可行的实现方式中,由于第一共享区域中的随机数为第一参数的值,且在向第一共享区域中写入第一线程对应的随机数是指向第一共享区域中的第一参数赋值,因此,可以保证第一共享区域中只包括一个随机数。需要说明的是,在第一线程请求访问临界区时,可能不存在其它线程同时请求访问该临界区,也可能存在其它线程同时请求访问该临界区。下面,结合图3a-图3b对该两种可能的情况进行说明:一种可能的情况:只有第一线程请求访问临界区。图3a为本公开实施例提供的一种向第一共享区域写随机数的示意图。请参见图3a,在同一时刻,若只有第一线程请求访问临界区,则只需向第一共享区域写入第一线程对应的随机数。例如,假设第一共享区域中当前的随机数为x,第一线程对应的随机数为x1,在向第一共享区域写入第一线程对应的随机数之后,第一共享区域中的随机数为x1。另一种可能的情况:第一线程和第二线程同时请求访问临界区。图3b为本公开实施例提供的另一种向第一共享区域写随机数的示意图。请参见图3b,在同一时刻,假设第一线程和第二线程同时请求访问临界区,则向第一共享区域同时写第一线程对应的随机数和第二线程对应的随机数。可选的,可以由处理器中不同的处理核同时向第一共享区域同时写第一线程对应的随机数和第二线程对应的随机数,例如,处理器中的处理核1向第一共享区域写第一线程对应的随机数,处理器中的处理核2向第一共享区域写第二线程对应的随机数,处理核1和处理核2同时向第一共享区域中写入对应的随机数。在向第一共享区域同时写第一线程对应的随机数和第二线程对应的随机数之后,只有一个随机数可以成功的写入至第一共享区域。例如,假设第一共享区域中当前的随机数为x,第一线程对应的随机数为x1,第二线程对应的随机数为x2,则向第一共享区域同时写第一线程对应的随机数和第二线程对应的随机数之后,第一共享区域中的随机数有可能为x1,也有可能为x2。s202、在第二共享区域为空、或者第二共享区域中的随机数为预设值时,在第二共享区域中写入第一线程对应的随机数。第一共享区域中可存储一个随机数,即,在一个时刻,第一共享区域中只有一个随机数。其中,只有在第二共享区域为空、或者第二共享区域中的随机数为预设值时,才能向第二共享区域中写入随机数。若第二共享区域不为空、且第二共享区域中的随机数不是预设值,则无法向第二共享区域写入随机数。第二共享区域可以为电子设备中的内存区域、硬盘区域、存储设备(例如寄存器等)等。可选的,第二共享区域的存储空间的大小大于或等于一个随机数的大小。当第二共享区域的存储空间的大小大于一个随机数的大小时,还可以在第二共享区域中存储第二参数,在向第二共享区域中写入随机数时,可以是将该第二参数的值设置为该随机数。相应的,第二共享区域中的随机数是指第二参数的值。可选的,当第一共享区域中包括第一参数,第一共享区域中的随机数为第一参数的值时,可以通过如下可行的实现方式在第二共享区域中写入第一线程对应的随机数:将第一共享区域中的第一参数的值设置为第一线程对应的随机数。这样,可以保证第二共享区域中只包括一个随机数。需要说明的是,在第一线程请求访问临界区时,可能不存在其它线程同时请求访问该临界区,也可能存在其它线程同时请求访问该临界区。下面,结合图4a-图4b对该两种可能的情况进行说明:一种可能的情况:只有第一线程请求访问临界区。图4a为本公开实施例提供的一种向第二共享区域写随机数的示意图。请参见图4a,在同一时刻,若只有第一线程请求访问临界区,且第二共享区域当前为空,或者第二共享区域中的随机数为预设值,则只需向第二共享区域写入第一线程对应的随机数。例如,假设第二共享区域中当前为空,第一线程对应的随机数为x1,在向第二共享区域写入第一线程对应的随机数之后,第二共享区域中的随机数为x1。另一种可能的情况:第一线程和第二线程同时请求访问临界区。图4b为本公开实施例提供的另一种向第二共享区域写随机数的示意图。请参见图4b,在同一时刻,假设第一线程和第二线程同时请求访问临界区,且向第二共享区域写入第一线程对应的随机数时第二共享区域为空,向第二共享区域写入第二线程对应的随机数时第二共享区域为空,则向第二共享区域同时写第一线程对应的随机数和第二线程对应的随机数。可选的,可以由处理器中不同的处理核同时向第二共享区域同时写第一线程对应的随机数和第二线程对应的随机数,例如,处理器中的处理核1向第二共享区域写第一线程对应的随机数,处理器中的处理核2向第二共享区域写第二线程对应的随机数,处理核1和处理核2同时向第二共享区域中写入对应的随机数。在向第二共享区域同时写第一线程对应的随机数和第二线程对应的随机数之后,只有一个随机数可以成功的写入至第二共享区域。例如,假设第二共享区域当前为空,第一线程对应的随机数为x1,第二线程对应的随机数为x2,则向第二共享区域同时写第一线程对应的随机数和第二线程对应的随机数之后,第二共享区域中的随机数有可能为x1,也有可能为x2。可选的,当第一共享区域中的随机数为第一参数的值,第二共享区域中的随机数为第二参数的值时,则第一共享区域和第二共享区域可以为同一共享区域,第一参数和第二参数为该同一共享区域中的参数。例如,在一个共享区域中第一参数和第二参数,将第一参数的值确定为第一共享区域中的随机数,将第二参数的值确定为第二共享区域中的随机数。s203、根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,确定第一线程是否访问临界区。第一共享区域中当前时刻的随机数可能为第一线程对应的随机数,也可能为其它线程对应的随机数。例如,在向第一共享区域和第二共享区域写入第一线程对应的随机数的过程中(s201与s203之间),若没有其它线程需要访问临界区,则不会向第一共享区域中写入其它线程对应的随机数,则第一共享区域中当前时刻的随机数仍为第一线程对应的随机数;若有其它线程需要访问临界区,则会向第一共享区域中写入其它线程对应的随机数,则第一共享区域中当前时刻的随机数为其它线程对应的随机数。第二共享区域中当前时刻的随机数可能为第一线程对应的随机数,也可能为其它线程对应的随机数。例如,在向第二共享区域写入第一线程对应的随机数的同时,若没有其它线程需要访问临界区,则不会向第二共享区域中写其它线程对应的随机数,则第二共享区域中当前时刻的随机数为第一线程对应的随机数;若有其它线程需要访问临界区,则会同时向第二共享区域写第一线程对应的随机数和第二线程对应的随机数,且只有一个线程对应的随机数会成功的写入第二共享区域,若第一线程对应的随机数成功的写入第二共享区域,则第二共享区域中的随机数为第一线程对应的随机数,若其它线程对应的随机数成功的写入第二共享区域,则第二共享区域中的随机数为其它线程对应的随机数。根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,可以判断是否还有除第一线程之外的其它线程与第一线程同时请求访问临界区,若没有其它线程与第一线程同时请求访问临界区,则允许第一线程访问请求临界区,若有其它线程与第一线程同时请求访问临界区,则根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,确定访问临界区的一个线程,并由该一个线程访问临界区。本公开实施例提供的数据访问方法,在第一线程访问临界区之前,在第一共享区域中写入第一线程对应的随机数,在第二共享区域为空、或者第二共享区域中的随机数为预设值时,在第二共享区域中写入第一线程对应的随机数,根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,确定第一线程是否访问临界区,进而使得在同一时刻,只有一个线程可以访问临界区,提高了数据访问的可靠性。在上述任意一个实施例的基础上,下面,结合图5,对数据访问方法进行详细说明。图5为本公开实施例提供的另一种数据访问方法的流程示意图。请参见图5,该方法可以包括:s501、在第一线程访问临界区之前,在第一共享区域中写入第一线程对应的随机数。需要说明的是,s501的执行过程可以参见s201的执行过程,此处不再进行赘述。s502、判断第二共享区域是否为空。若是,则执行s503。若否,则执行s502。可选的,在判断第二共享区域为空时,还可以执行s501。需要说明的是,在s502中,还可以判断第二共享区域是否为预设值,若是,则执行s503,若否,则执行s502。在图5所示的实施例中,以判断第二共享区域是否为空为例进行说明。若第二共享区域为空,则说明当前时刻没有线程正在访问临界区,则可以允许在第二共享区域中写入第一线程对应的随机数。若第二共享区域不为空,则说明当前时刻存在线程正在访问临界区,则不允许在第二共享区域中写入第一线程对应的随机数。s503、在第二共享区域中写入第一线程对应的随机数。需要说明的是,s503的执行过程可以参见s202中向第二共享区域中写入第一线程对应的随机数的过程,此处不再进行赘述。s504、判断第一共享区域中当前时刻的随机数是否为第一线程对应的随机数。若是,则执行s505。若否,则执行s507。若判断第一共享区域中当前时刻的随机数为第一线程对应的随机数,则说明在第一共享区域和第二共享区域写入第一线程对应的随机数的过程中,没有其它线程需要访问临界区,则可以允许第一线程访问临界区。若判断第一共享区域中当前时刻的随机数不是第一线程对应的随机数,则说明在第一共享区域和第二共享区域写入第一线程对应的随机数的过程中,存在其它线程需要访问临界区,则需要根据第二共享区域中的随机数判断是否允许第一线程访问临界区。s505、控制第一线程访问临界区。s506、在第一线程访问临界区结束之后,删除第二共享区域中的随机数。在删除第二共享区域中的随机数之后,第二共享区域为空。可选的,若在s502中判断第二共享区域是否为预设值,则在s506中,在第一线程访问临界区之后,可以将第二共享区域的随机数更新为预设值。s507、在预设时长之后,判断第二共享区域中的随机数是否为第一线程对应的随机数。若是,则执行s505-s506。若否,则执行s508。其中,预设时长大于预设的对临界区的访问时长。该预设时长可以为预设的、对临界区的最大访问时长。若第二共享区域中的随机数为第一线程对应的随机数,则说明没有向第二共享区域中写其它线程的随机数,或者,向第二共享区域中写了其它线程对应的随机数,但是没有成功的将其它线程对应的随机数写入至第二共享区域,该种情况下,可以允许第一线程访问临界区,但是,不允许其它线程访问临界区。若第二共享区域中的随机数不是第一线程对应的随机数,则说明向第一共享区域中同时写第一线程对应的随机数和其它线程对应的随机数,且未成功的向第二共享区域写入第一线程对应的随机数,成功的向第二共享区域写入其它线程对应的随机数。在该种情况下,不允许第一线程访问临界区。s508、确定第一线程不访问临界区。在图5所示的实施例中,在第一线程访问临界区之前,在第一共享区域中写入第一线程对应的随机数,在第二共享区域为空、或者第二共享区域中的随机数为预设值时,在第二共享区域中写入第一线程对应的随机数,根据第一共享区域中当前时刻的随机数和第二共享区域中的随机数,确定第一线程是否访问临界区,进而使得在同一时刻,只有一个线程可以访问临界区,提高了数据访问的可靠性。在上述任意一个实施例的基础上,下面,结合图6a-图6f,通过具体示例,对上述数据访问方法进行详细说明。图6a为本公开实施例提供的一种数据访问过程示意图。请参见图6a,假设在线程1请求访问临界区的过程中,没有其它线程请求访问临界区,假设线程1对应的随机数为x1。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1在t1时刻请求访问临界区,则在t1时刻,在第一共享区域写入随机数x1。在t2时刻,由于第二共享区域为空,则在第二共享区域写入随机数x1,此时,由于第一共享区域中的随机数仍然为x1,则线程1可以从t2时刻开始访问临界区,假设线程1在t3时刻访问临界区结束,则将第二共享区域清空。图6b为本公开实施例提供的另一种数据访问过程示意图。请参见图6b,假设在线程1请求访问临界区的过程中,线程t2也请求访问临界区,假设线程1对应的随机数为x1,线程2对应的随机数为x2。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1在t1时刻请求访问临界区,则在t1时刻,在第一共享区域写入随机数x1。假设线程2在t2时刻请求访问临界区,则在t2时刻,在第一共享区域写入随机数x2。在t3时刻,由于第二共享区域为空,则在第二共享区域写入随机数x1。当需要向第二共享区域写入随机数x2时,由于第二共享区域不为空,则无法向第二共享区域写入随机数x2。在t3时刻,由于第一共享区域中的随机数不是x1,则等待预设时长之后,在t4时刻,判断第二共享区域中的随机数仍为x1,则线程1可以从t4时刻开始访问临界区,假设线程1在t5时刻访问临界区结束,则将第二共享区域清空。在t6时刻,判断第二共享区域为空,则向第二共享区域写入x2,此时,由于第一共享区域中的随机数仍为x2,则线程2可以从t6时刻开始访问临界区,假设线程2在t7时刻访问临界区结束,则将第二共享区域清空。图6c为本公开实施例提供的又一种数据访问过程示意图。请参见图6c,假设线程1和线程2同时请求访问临界区,假设线程1对应的随机数为x1,线程2对应的随机数为x2。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1和线程2在t1时刻同时请求访问临界区,则在t1时刻,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第一共享区域写入了随机数x1。在t2时刻,由于第二共享区域为空,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第二共享区域写入了随机数x1。在t2时刻,由于第一共享区域中的随机数为x1,则线程1可以从t2时刻开始访问临界区,假设线程1在t3时刻访问临界区结束,则将第二共享区域清空。在t2时刻,由于第一共享区域中的随机数不是x2,则线程2等待预设时长(线程1访问临界区的时长),在预设时长之后,第二共享区域被清空,即,第二共享区域中的随机数不是x2,则线程2不访问临界区,例如,可以继续在第一共享区域中写入x2。图6d为本公开实施例提供的再一种数据访问过程示意图。请参见图6d,假设线程1和线程2同时请求访问临界区,假设线程1对应的随机数为x1,线程2对应的随机数为x2。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1和线程2在t1时刻同时请求访问临界区,则在t1时刻,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第一共享区域写入了随机数x1。在t2时刻,由于第二共享区域为空,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第二共享区域写入了随机数x2。在t2时刻,由于第一共享区域中的随机数为x1,则线程1可以从t2时刻开始访问临界区,假设线程1在t3时刻访问临界区结束,则将第二共享区域清空。在t2时刻,由于第一共享区域中的随机数不是x2,则线程2等待预设时长(线程1访问临界区的时长),在预设时长之后,第二共享区域被清空,即,第二共享区域中的随机数不是x2,则线程2不访问临界区,例如,可以继续在第一共享区域中写入x2。图6e为本公开实施例提供的另一种数据访问过程示意图。请参见图6e,假设线程1和线程2同时请求访问临界区,假设线程1对应的随机数为x1,线程2对应的随机数为x2。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1和线程2在t1时刻同时请求访问临界区,则在t1时刻,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第一共享区域写入了随机数x2。在t2时刻,由于第二共享区域为空,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第二共享区域写入了随机数x2。在t2时刻,由于第一共享区域中的随机数为x2,则线程2可以从t2时刻开始访问临界区,假设线程2在t3时刻访问临界区结束,则将第二共享区域清空。在t2时刻,由于第一共享区域中的随机数不是x1,则线程1等待预设时长(线程2访问临界区的时长),在预设时长之后,第二共享区域被清空,即,第二共享区域中的随机数不是x1,则线程1不访问临界区,例如,可以继续在第一共享区域中写入x1。图6f为本公开实施例提供的又一种数据访问过程示意图。请参见图6f,假设线程1和线程2同时请求访问临界区,假设线程1对应的随机数为x1,线程2对应的随机数为x2。假设在时刻t0时,第一共享区域中的随机数为x,第二共享区域为空。假设线程1和线程2在t1时刻同时请求访问临界区,则在t1时刻,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第一共享区域写入了随机数x2。在t2时刻,由于第二共享区域为空,同时向第一共享区域写随机数x1和随机数x2,假设成功的在第二共享区域写入了随机数x1。在t2时刻,由于第一共享区域中的随机数为x2,则线程2可以从t2时刻开始访问临界区,假设线程2在t3时刻访问临界区结束,则将第二共享区域清空。在t2时刻,由于第一共享区域中的随机数不是x1,则线程1等待预设时长(线程2访问临界区的时长),在预设时长之后,第二共享区域被清空,即,第二共享区域中的随机数不是x1,则线程1不访问临界区,例如,可以继续在第一共享区域中写入x1。图7为本公开实施例提供的一种数据访问装置的结构示意图。请参见图7,数据访问装置10可以包括写入模块11和确定模块12,其中,所述写入模块11用于,在第一线程访问临界区之前,在第一共享区域中写入所述第一线程对应的随机数,所述第一共享区域可存储一个随机数;所述写入模块11还用于,在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数,所述第二共享区域可存储一个随机数;所述确定模块12用于,根据所述第一共享区域中当前时刻的随机数和所述第二共享区域中的随机数,确定所述第一线程是否访问所述临界区。本公开实施例提供的数据访问装置可以执行方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。在一种可能的实施方式中,所述确定模块12具体用于:判断所述第一共享区域中当前时刻的随机数是否为所述第一线程对应的随机数;若是,则确定所述第一线程访问所述临界区;若否,则根据所述第二共享区域中的随机数确定所述第一线程是否访问所述临界区。在一种可能的实施方式中,所述确定模块12具体用于:在预设时长之后,判断所述第二共享区域中的随机数是否为所述第一线程对应的随机数,所述预设时长大于预设的对临界区的访问时长;若是,则确定所述第一线程访问所述临界区;若否,则确定所述第一线程不访问所述临界区。图8为本公开实施例提供的另一种数据访问装置的结构示意图。在图7所示实施例的基础上,请参见图8,数据访问装置10还包括控制模块13和删除模块14,其中,所述控制模块13用于,在确定所述第一线程访问所述临界区之后,控制所述第一线程访问所述临界区;所述删除模块14用于,在所述第一线程访问所述临界区结束之后,删除所述第二共享区域中的随机数,或者将所述第二共享区域中的随机数更新为所述预设值。在一种可能的实施方式中,所述写入模块11具体用于:执行判断操作,所述判断操作包括:判断所述第二共享区域是否为空,或者所述第二共享区域中的随机数是否为预设值;在第二共享区域为空、或者所述第二共享区域中的随机数为预设值时,在所述第二共享区域中写入所述第一线程对应的随机数;在第二共享区域不是空,且所述第二共享区域中的随机数不是预设值时,则重复执行所述判断操作,直至所述第二共享区域为空、或者所述第二共享区域中的随机数为预设值。在一种可能的实施方式中,所述写入模块11还用于,在所述写模块11执行判断操作之前,在第一共享区域中写入所述第一线程对应的随机数。在一种可能的实施方式中,所述写入模块11具体用于:删除所述第一共享区域中的随机数,并在所述第一共享区域中写入所述第一线程对应的随机数;或者,在所述第一共享区域中写入所述第一线程对应的随机数,所述第一线程对应的随机数覆盖所述第一共享区域中随机数。在一种可能的实施方式中,所述第一共享区域中包括第一参数,所述第一共享区域中的随机数为所述第一参数的值;所述写入模块11具体用于:将所述第一共享区域中的所述第一参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第二共享区域中包括第二参数,所述第二共享区域中的随机数为所述第二参数的值;所述写入模块11具体用于:将所述第二共享区域中的所述第二参数的值设置为所述第一线程对应的随机数。在一种可能的实施方式中,所述第一共享区域和所述第二共享区域为同一共享区域,所述第一参数和所述第二参数为所述同一共享区域中的参数。本公开实施例提供的数据访问装置可以执行方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。图9为本公开实施例提供的电子设备的结构示意图。电子设备20可以为终端设备或服务器。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(personaldigitalassistant,简称pda)、平板电脑(portableandroiddevice,简称pad)、便携式多媒体播放器(portablemediaplayer,简称pmp)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。请参见图9,电子设备20可以包括处理装置(例如中央处理器、图形处理器等)21,其可以根据存储在只读存储器(readonlymemory,简称rom)22中的程序或者从存储装置28加载到随机访问存储器(randomaccessmemory,简称ram)23中的程序而执行各种适当的动作和处理。在ram23中,还存储有电子设备20操作所需的各种程序和数据。处理装置21、rom22以及ram23通过总线24彼此相连。输入/输出(i/o)接口25也连接至总线24。通常,以下装置可以连接至i/o接口25:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置26;包括例如液晶显示器(liquidcrystaldisplay,简称lcd)、扬声器、振动器等的输出装置27;包括例如磁带、硬盘等的存储装置28;以及通信装置29。通信装置29可以允许电子设备20与其他设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备20,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置29从网络上被下载和安装,或者从存储装置28被安装,或者从rom22被安装。在该计算机程序被处理装置21执行时,执行本公开实施例的方法中限定的上述功能。需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(localareanetwork,简称lan)或广域网(wideareanetwork,简称wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。最后应说明的是:以上各实施例仅用以说明本公开实施例的技术方案,而非对其限制;尽管参照前述各实施例对本公开实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开实施例方案的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1