一种并发访问控制方法和系统转让专利

申请号 : CN201510424714.X

文献号 : CN105138310B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 樊宇

申请人 : 北京京东尚科信息技术有限公司北京京东世纪贸易有限公司

摘要 :

本申请公开了一种并发访问控制方法和系统,利用锁信息服务器保存需要并行调用的公共资源的加锁信息,该加锁信息将包含当前接受的请求调用的测试用例信息、公共资源的标识信息以及请求调用时的时间戳。采用本发明,并行程序可以基于锁信息,来获知当前所访问的公共资源的使用状态,并在未被使用时对其进行加锁,从而可以有效解决不同并行程序的并发访问冲突问题,实现所有情况下不同并行程序对公共资源的并发访问,且易于实现。

权利要求 :

1.一种并发访问控制方法,其特征在于,包括:

a、预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息;

b、每个所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳;

c、所述锁信息服务器从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源;

d、所述并行程序在所述调用结束后,触发所述锁信息服务器对所述公共资源解锁;所述锁信息服务器判断当前是否保存有所述公共资源的锁信息;如果是,则执行步骤c;

步骤b中所述触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁包括:所述并行程序向所述锁信息服务器发送资源访问请求消息,所述资源访问请求消息中携带所述运行时刻信息;

所述信息服务器判断当前保存的锁信息中是否存在:与所述资源访问请求消息指示的所述公共资源相关联的锁信息,如果有,则通知所述并行程序所述公共资源已加锁;否则,通知所述并行程序所述公共资源未加锁。

2.根据权利要求1所述的方法,其特征在于,步骤b中所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁包括:所述并行程序向所述锁信息服务器发送携带所述运行时刻信息的加锁请求消息;

所述锁信息服务器将所述加锁请求消息中的运行时刻信息和当前的时间戳相关联,得到相应的锁信息并保存。

3.根据权利要求1所述的方法,其特征在于,步骤c中所述触发所选择的锁信息对应的并行程序调用所述公共资源包括:所述锁信息服务器向所选择的锁信息对应的并行程序发送加锁完成消息;

所述并行程序收到所述加锁完成消息后,执行对所述公共资源的调用。

4.根据权利要求1所述的方法,其特征在于,所述触发所述锁信息服务器对所述公共资源解锁包括:所述并行程序在所述调用结束后,向所述锁信息服务器发送解锁请求消息,所述解锁请求消息中携带所述运行时刻信息;

所述锁信息服务器根据所述解锁请求消息,从当前保存的该解锁请求消息所指示的公共资源的所有锁信息中,选择出所述时间戳最早的锁信息并将其删除。

5.一种并发访问控制系统,其特征在于,包括:

公共资源配置模块,用于预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息;

加锁模块,用于所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳;所述触发包括:向所述锁信息服务器发送资源访问请求消息,所述资源访问请求消息中携带所述运行时刻信息;

锁信息服务器,用于根据所述运行时刻信息和本服务器当前保存的锁信息,判断所述公共资源是否被加锁,并在未加锁时利用所述运行时刻信息对所述公共资源进行加锁;所述判断所述公共资源是否被加锁包括:判断当前保存的锁信息中是否存在:与所述资源访问请求消息指示的所述公共资源相关联的锁信息,如果有,则通知所述并行程序所述公共资源已加锁;否则,通知所述并行程序所述公共资源未加锁;在解锁模块的触发下,对所述公共资源进行解锁;在所述加锁完成后或所述解锁结束后,从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源;

解锁模块,用于在所述并行程序执行所述调用结束后,触发所述锁信息服务器对所述公共资源解锁。

6.根据权利要求5所述的系统,其特征在于,所述加锁模块,进一步用于向所述锁信息服务器发送携带所述运行时刻信息的加锁请求消息;

所述锁信息服务器,进一步用于将所述加锁请求消息中的运行时刻信息和当前的时间戳相关联,得到相应的锁信息并保存。

7.根据权利要求5所述的系统,其特征在于,所述锁信息服务器,进一步用于向所选择的锁信息对应的并行程序发送加锁完成消息;

所述加锁模块,进一步用于在所述并行程序收到所述加锁完成消息后,执行对所述公共资源的调用。

8.根据权利要求5所述的系统,其特征在于,所述解锁模块,进一步用于所述并行程序在所述调用结束后,向所述锁信息服务器发送解锁请求消息,所述解锁请求消息中携带所述运行时刻信息;

所述锁信息服务器,进一步用于根据所述解锁请求消息,从当前保存的该解锁请求消息所指示的公共资源的所有锁信息中,选择出所述时间戳最早的锁信息并将其删除。

说明书 :

一种并发访问控制方法和系统

技术领域

[0001] 本发明涉及计算机技术,特别是涉及一种并发访问控制方法和系统。

背景技术

[0002] 目前,在计算机应用领域,常常需要多个程序并行执行,而多个并行程序执行时,通常会存在同时使用同一个调用接口的情况,调用接口一般都会对后台数据库等存储系统进行读写操作。这样,就会产生多个并行程序并发访问同一数据资源的情况。例如,在软件测试过程中,往往会有多个测试用例同时使用相同调用接口访问同一数据的情况。此时,为了确保系统数据的安全性,需要对这种并发访问进行控制,以避免多个并发程序同时访问相同数据造成对系统数据的破坏。
[0003] 目前,针对同一执行机上同一进程的多个测试用例线程产生的上述并发访问问题,通常采用多线程加锁的方式来解决,即为冲突代码设置相应的锁参数或线程同步代码,不同线程在调用该冲突代码时需要根据该锁参数状态或线程状态判断是否可以调用,否则需要待该冲突代码被解锁后方可调用。
[0004] 上述多线程加锁方法仅适用于解决同一进程的多个线程的并发访问冲突。而在实际应用中,同一调用接口的并发访问冲突不限于该多线程情景,两个测试用例可能分别属于不同的进程,甚至存在于不同的执行机上,这些情况下发生冲突的用例是无法访问同一资源下的待更改数据的,因此,无法采用多线程加锁方法解决上述并发访问冲突问题。针对上述情况,通常采用在设计测试用例时确保访问冲突资源时不同测试用例使用不同输入参数的方法,来解决并发访问冲突问题。该方法可以解决上述并发访问冲突的问题。但是,需要在设计时理清测试场景中的共用接口的调用环境,以定位用例中会发生并行访问冲突的准确位置,并且需要对共用接口所访问数据的维护程序进行修改,这些将不可避免的增加程序设计、调度的复杂性、降低调试效率并且需要对已有的数据资源和程序进行必要的改动。

发明内容

[0005] 有鉴于此,本发明的主要目的在于提供一种并发访问控制方法和系统,可以有效解决不同并行程序的并发访问冲突问题,且易于实现。
[0006] 为了达到上述目的,本发明提出的技术方案为:
[0007] 一种并发访问控制方法,包括:
[0008] a、预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息;
[0009] b、每个所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳;
[0010] c、所述锁信息服务器从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源;
[0011] d、所述并行程序在所述调用结束后,触发所述锁信息服务器对所述公共资源解锁;所述锁信息服务器判断当前是否保存有所述公共资源的锁信息;如果是,则执行步骤c。
[0012] 一种并发访问控制系统,包括:
[0013] 公共资源配置模块,用于预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息;
[0014] 加锁模块,用于所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳;
[0015] 锁信息服务器,用于根据所述运行时刻信息和本服务器当前保存的锁信息,判断所述公共资源是否被加锁,并在未加锁时利用所述运行时刻信息对所述公共资源进行加锁;在解锁模块的触发下,对所述公共资源进行解锁;在所述加锁完成后或所述解锁结束后,从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源;
[0016] 解锁模块,用于在所述并行程序执行所述调用结束后,触发所述锁信息服务器对所述公共资源解锁。
[0017] 综上所述,本发明提出的并发访问控制方法和系统,通过利用锁信息服务器保存需要并行调用的公共资源的加锁信息,这样,并行程序可以基于访问锁信息服务器上的锁信息,来获知当前所访问公共资源的使用状态,并在未被使用时对其进行加锁,从而可以实现所有情况下不同并行程序对公共资源的并发访问,而不受限于属于同一进程的多个线程的并发访问情况,并且不需要修改相应的数据资源维护系统、易于实现。

附图说明

[0018] 图1为本发明实施例一的方法流程示意图;
[0019] 图2为本发明实施例一的系统结构示意图。

具体实施方式

[0020] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
[0021] 本发明的核心思想是:利用锁信息服务器保存需要并行调用的公共资源的加锁信息,该加锁信息将包含当前接受的请求调用的测试用例信息、公共资源的标识信息以及请求调用时的时间戳。这样,并发程序可以基于锁信息,来获知当前所访问公共资源的使用状态,并在未被使用时对其进行加锁,从而可以实现所有情况下不同并行程序对公共资源的并发访问,而不受限于属于同一进程的多个线程的并发访问情况,并且不需要修改相应的数据资源维护系统、易于实现。
[0022] 图1为本发明实施例一的流程示意图,如图1所示,该实施例主要包括:
[0023] 步骤101、预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息。
[0024] 本步骤,用于为并行程序中需要并行调用的资源配置标识,以便在后续资源调用时利用其标识信息生成相应的锁信息,从而将资源与相应的锁信息进行绑定。
[0025] 这里需要说明的是,在实际应用中,较佳地只需要为并行调用的公共资源所在的程序代码段分配标识即可,而不需要像多线程加锁方法中那样必须定位到具体冲突的代码行上。这里只需要考虑外部调用存在并发写操作的大致代码范围,原则上是需要加锁控制执行的公共资源的代码范围大于等于产生冲突的代码行即可,这样,可以大幅度减化设计人员在进行程序设计和调试时的复杂度,提高设计效率,并减少自动化执行时的出错率。
[0026] 具体地,所述并行程序可以是一测试用例。
[0027] 步骤102、每个所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳。
[0028] 本步骤中,每个并行程序在需要调用公共资源时,需要先触发锁信息服务器检查一下该资源是否加锁,如果检查到加锁,则需要等待,直至该资源不再被加锁,如果检查到未被加锁,则需要触发锁信息服务器对该公共资源进行加锁。
[0029] 需要说明的是,在实际应用中,有可能是多个并行程序同时检查同一公共资源是否未被加锁,如果当前该公共资源处于未被加锁状态,则这几个并行程序将会同时获得对该公共资源进行加锁的资格,此时,锁信息服务器将会根据为各个并行程序生成的锁信息中的时间戳来对它们的加锁信息进行区分,该时间戳是由锁信息服务器接收到各自的运行时刻信息的时刻所决定的,在后续的公共资源访问过程中将优先触发时间戳最早的锁信息对应的并行程序执行,这样,就可以实现对多个并行程序并发访问同一数据资源的控制,避免并发访问冲突所造成的数据资源的破坏。
[0030] 这里,通过利用并行程序的标识信息和所述公共资源的标识信息以及时间戳,来构造公共资源的锁信息,可以使锁信息与并行程序、公共资源进行绑定,同时,利用时间戳还可以限定了公共资源的并发访问顺序,因此,可以实现对公共资源并发访问的有效控制。并且,还不受限于属于同一进程的多个线程的并发访问情况,而适用于所有情况下不同并行程序对公共资源的并发访问情况。
[0031] 当公共资源被锁定时并行程序需要再等待时间t后重新申请加锁,t≥0,其具体大小可由本领域技术人员根据实际需要设置,特殊的,当t=0时,意味着并行程序获知公共资源当前已被加锁后立即再触发锁信息服务器进行资源是否加锁的判断。
[0032] 在实际应用中,所述锁信息服务器可以是任何一个并行程序所在的执行机,也可以是单独配置的服务器,具体可由本领域技术人员根据实际需要进行配置。
[0033] 较佳地,本步骤中所述触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁,可以采用下述步骤实现:
[0034] 步骤x1、所述并行程序向所述锁信息服务器发送资源访问请求消息,所述资源访问请求消息中携带所述运行时刻信息;
[0035] 步骤x2、所述信息服务器判断当前保存的锁信息中是否存在:与所述资源访问请求消息指示的所述公共资源相关联的锁信息,如果有,则通知所述并行程序所述公共资源已加锁;否则,通知所述并行程序所述公共资源未加锁。
[0036] 较佳地,本步骤中所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,可以采用下述步骤实现:
[0037] 步骤y1、所述并行程序向所述锁信息服务器发送携带所述运行时刻信息的加锁请求消息。
[0038] 步骤y2、所述锁信息服务器将所述加锁请求消息中的运行时刻信息和当前的时间戳相关联,得到相应的锁信息并保存。
[0039] 步骤103、所述锁信息服务器从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源。
[0040] 较佳地,本步骤中触发所选择的锁信息对应的并行程序调用所述公共资源,可以采用下述步骤实现:
[0041] 步骤1031、所述锁信息服务器向所选择的锁信息对应的并行程序发送加锁完成消息。
[0042] 步骤1032、所述并行程序收到所述加锁完成消息后,执行对所述公共资源的调用。
[0043] 步骤104-105、所述并行程序在所述调用结束后,触发所述锁信息服务器对所述公共资源解锁;所述锁信息服务器判断当前是否保存有所述公共资源的锁信息;如果是,则执行步骤103。
[0044] 较佳地,所述触发所述锁信息服务器对所述公共资源解锁可以采用下述步骤实现:
[0045] 步骤z1、所述并行程序在所述调用结束后,向所述锁信息服务器发送解锁请求消息,所述解锁请求消息中携带所述运行时刻信息。
[0046] 步骤z2、所述锁信息服务器根据所述解锁请求消息,从当前保存的该解锁请求消息所指示的公共资源的所有锁信息中,选择出所述时间戳最早的锁信息并将其删除。
[0047] 在上述步骤104~105中,由于在步骤103中选择当前执行对公共资源进行调用的并行程序时是按照锁信息时间戳最早的原则选择的,因此,当该并行程序执行完成后就需要将其锁信息从锁信息服务器上删除,从而可以实现该并行程序对该公共资源的释放,然后,锁信息服务器再判断是否还有需要并发调用该公共资源的并行程序,即判断当前是否保存有所述公共资源的锁信息,如果有,则需要执行步骤103触发下一个并行程序对该公共资源的调用,如此循环直到同时请求调用该公共资源的所有并发程序都执行完相应的调用并解锁后,锁信息服务器上将不存在该公共资源的锁信息,此时该公共资源将处于未加锁状态,至此,将完成对一次并发访问的控制过程。
[0048] 从上述方法可以看出,本发明通过利用锁信息服务器维护公共资源的锁信息,可以实现所有情况下不同并行程序对公共资源的并发访问,而不受限于属于同一进程的多个线程的并发访问情况,并且不需要修改相应的数据资源维护系统、易于实现。
[0049] 图2为与上述方法相对应的一种并发访问控制系统,如图2所示,该系统包括:
[0050] 公共资源配置模块,用于预先确定并行程序中需要并行调用的公共资源,并为所述公共资源配置相应的标识信息;
[0051] 加锁模块,用于所述并行程序在需要调用所述公共资源时,生成本程序当前的运行时刻信息,触发锁信息服务器根据所述运行时刻信息和该服务器当前保存的锁信息,判断所述公共资源是否被加锁;如果是,则所述并行程序按照预设的间隔时间t重复所述触发;否则,所述并行程序触发所述锁信息服务器利用所述运行时刻信息对所述公共资源进行加锁,所述运行时刻信息包括所述并行程序的标识信息和所述公共资源的标识信息,所述加锁后得到所述公共资源的锁信息包括所述运行时刻信息和当前的时间戳;
[0052] 锁信息服务器,用于根据所述运行时刻信息和本服务器当前保存的锁信息,判断所述公共资源是否被加锁,并在未加锁时利用所述运行时刻信息对所述公共资源进行加锁;在解锁模块的触发下,对所述公共资源进行解锁;在所述加锁完成后或所述解锁结束后,从当前保存的所述公共资源的所有锁信息中,选择出所述时间戳最早的锁信息,并触发所选择的锁信息对应的并行程序调用所述公共资源;
[0053] 解锁模块,用于在所述并行程序执行所述调用结束后,触发所述锁信息服务器对所述公共资源解锁。
[0054] 上述实际应用中,加锁模块和解锁模块将被部署在每个执行机上,以实际对本执行机上的并行程序的并发访问控制,锁信息服务器可以是任何一个并行程序所在的执行机,也可以是单独配置的服务器,具体可由本领域技术人员根据实际需要进行配置,公共资源配置模块也可以部署于任何一个并行程序所在的执行机或锁信息服务器上,只要将各执行机可从该模块获知公共资源的标识即可。
[0055] 较佳地,所述加锁模块,进一步用于所述并行程序在需要调用所述公共资源时,向所述锁信息服务器发送资源访问请求消息,所述资源访问请求消息中携带所述运行时刻信息;
[0056] 所述信息服务器,进一步用于判断当前保存的锁信息中是否存在:与所述资源访问请求消息指示的所述公共资源相关联的锁信息,如果有,则通知所述并行程序所述公共资源已加锁;否则,通知所述并行程序所述公共资源未加锁。
[0057] 较佳地,所述加锁模块,进一步用于向所述锁信息服务器发送携带所述运行时刻信息的加锁请求消息;
[0058] 所述锁信息服务器,进一步用于将所述加锁请求消息中的运行时刻信息和当前的时间戳相关联,得到相应的锁信息并保存。
[0059] 较佳地,所述锁信息服务器,进一步用于向所选择的锁信息对应的并行程序发送加锁完成消息;
[0060] 所述加锁模块,进一步用于在所述并行程序收到所述加锁完成消息后,执行对所述公共资源的调用。
[0061] 较佳地,所述解锁模块,进一步用于所述并行程序在所述调用结束后,向所述锁信息服务器发送解锁请求消息,所述解锁请求消息中携带所述运行时刻信息;
[0062] 所述锁信息服务器,进一步用于根据所述解锁请求消息,从当前保存的该解锁请求消息所指示的公共资源的所有锁信息中,选择出所述时间戳最早的锁信息并将其删除。
[0063] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。