一种锁请求处理方法及装置制造方法

文档序号:6636709阅读:179来源:国知局
一种锁请求处理方法及装置制造方法
【专利摘要】本发明公开了一种锁请求处理方法及装置,用于解决现有技术中等待队列中的锁请求容易发生阻塞,导致共享资源的访问效率低下的技术问题。该方法包括:接收加锁请求,判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突;如果不存在冲突,则返回所述加锁请求的锁权限,并将所述加锁请求放入已授权队列。
【专利说明】一种锁请求处理方法及装置

【技术领域】
[0001]本发明涉及计算机领域,特别涉及一种锁请求处理方法及装置。

【背景技术】
[0002]锁是计算机系统中的一个核心概念。在单机系统中,锁用于保证多个线程对同一共享资源的互斥访问。简单的锁模型包括共享锁和排它锁,一种共享资源在某一时刻只能分派多个共享锁或者一个排它锁。在计算机集群环境中,借助于分布式锁可以保证分布在各成员节点(即计算机集群系统中的每一个物理设备)上的进程对集群中同一共享资源的互斥访问。
[0003]单机系统中的线程或集群系统中的节点要访问共享资源时,需要向锁管理器发出对该共享资源进行加锁的请求,只有在加锁请求被授权时才可以访问共享资源。锁管理器将锁请求分为两个队列,分别为授权队列和等待队列,其中,授权队列中的是已经获得授权的锁请求,等待队列中的是正在等待被授权的锁请求。当等待队列中的锁请求与授权队列中的锁请求存在权限冲突时,等待队列中的锁请求将不能获得授权,该锁请求将被挂在等待队列中,等待与其冲突的已授权锁请求被释放后,才能被授权。
[0004]现有技术中,锁管理器在处理加锁请求时,严格遵守先入先出队列(First InputFirst Output, FIFO)的原则。S卩,当一个节点或线程对共享资源请求加锁时,如果有其他锁请求在等待队列中等待,则将新的锁请求放到等待队列的最后,只有在位于该锁请求前面的请求均获得授权时,锁管理器才会处理该锁请求。因此,如果先到的锁请求因与已授权锁请求存在权限冲突而不能授权,将阻塞整个等待队列,严重降低了共享资源的访问效率。


【发明内容】

[0005]本发明实施例提供一种锁请求处理方法及装置,用于解决现有技术中等待队列中的锁请求容易发生阻塞,导致共享资源的访问效率低下的技术问题。
[0006]第一方面,本发明实施例提供了一种锁请求处理方法,包括:接收加锁请求,判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突;如果不存在冲突,则返回所述加锁请求的锁权限,并将所述加锁请求放入已授权队列。
[0007]结合第一方面,在第一方面的第一种可能的实现方式中,判断所述加锁请求请求的锁权限与已授权锁的锁权限是否存在冲突之前,所述方法还包括:
[0008]将所述加锁请求放入第一等待队列,所述第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列;判断所述第一等待队列当前的第一处理配额是否大于0,所述第一处理配额为所述第一等待队列中当前允许被处理的加锁请求的数量;如果所述第一处理配额大于0,则执行判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突的步骤。
[0009]结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在所述返回所述加锁请求的锁权限之后,所述方法还包括:将所述第一处理配额减I。
[0010]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,在判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突之后,所述方法还包括:如果所述加锁请求请求的锁权限与所述已授权的锁权限存在冲突,则判断所述第一等待队列中位于所述加锁请求之后的第二加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;如果不存在冲突,则返回所述第二加锁请求的锁权限,并将所述第二加锁请求放入所述已授权队列。
[0011]结合第一方面或第一方面的第一种可能的实现方式至第一方面的第三种可能的实现方式中的任意一种,在第一方面的第四种可能的实现方式中,所述方法还包括:
[0012]如果所述第一处理配额等于0,判断第二等待队列当前的第二处理配额是否大于0,所述第二等待队列中等待处理的加锁请求请求的锁权限与所述第一等待队列中等待处理的加锁请求请求的锁权限的类型不同;如果所述第二处理配额大于0,则判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;若不冲突,则返回所述第三加锁请求的锁权限,并将所述第三加锁请求放入所述已授权队列。
[0013]结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,在判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突之后,所述方法还包括:如果所述第三加锁请求请求的锁权限与所述已授权的锁权限存在冲突,则判断所述第二等待队列中的位于所述第三加锁请求之后的第四加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;若不冲突,则返回所述第四加锁请求的锁权限,并将所述第四加锁请求放入所述已授权队列。
[0014]结合第一方面的第四种可能的实现方式,在第一方面的第六种可能的实现方式中,在判断第二等待队列当前的处理配额是否大于O之后,所述方法还包括:如果所述第二处理配额等于0,则将所述第一处理配额恢复至第一初始值,将所述第二处理配额恢复至第二初始值。
[0015]结合第一方面,在第一方面的第七种可能的实现方式中,在判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突之前,所述方法还包括:
[0016]将所述加锁请求放入等待队列;在所述加锁请求不是位于等待队列的队首时,若所述等待队列当前的优先处理配额大于0,则执行判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突的步骤;其中,所述优先处理配额为所述等待队列中当前允许被处理的不是位于所述等待队列队首的加锁请求的数量。
[0017]结合第一方面的第七种可能的实现方式,在第一方面的第八种可能的实现方式中,在将所述加锁请求放入已授权队列之后,所述方法还包括:将所述优先处理配额减I。
[0018]结合第一方面的第七种可能的实现方式,在第一方面的第九种可能的实现方式中,所述方法还包括:
[0019]所述加锁请求位于所述等待队列的队首,或者,所述加锁请求不是位于所述等待队列的队首且所述等待队列当前的优选处理配额等于O时,若位于所述等待队列的加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,等待与所述位于所述等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理所述位于所述等待队列队首的加锁请求,并将所述位于所述等待队列队首的加锁请求放入所述已授权队列。
[0020]结合第一方面的第九种可能的实现方式,在第一方面的第十种可能的实现方式中,在将所述位于所述等待队列队首的加锁请求放入所述已授权队列之后,所述方法还包括:将所述优先处理配额恢复至第三初始值。
[0021]第二方面,本发明实施例提供了一种装置,包括:第一判断模块,用于判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突;第一授权模块,用于在所述加锁请求请求的锁权限与已授权的锁权限不存在冲突时,返回所述加锁请求的锁权限,并将所述加锁请求放入已授权队列。
[0022]结合第二方面,在第二方面的第一种可能的实现方式中,所述装置还包括:第一控制模块,用于将所述加锁请求放入第一等待队列,所述第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列;第二判断模块,用于判断所述第一等待队列当前的第一处理配额是否大于0,所述第一处理配额为所述第一等待队列中当前允许被处理的加锁请求的数量;其中,如果所述第二判断模块的判断结果表明所述第一处理配额大于0,则通过所述第一判断模块判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突。
[0023]结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述装置还包括:第一配额更新模块,用于在返回所述加锁请求的锁权限之后,将所述第一处理配额减I。
[0024]结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述装置还包括:第三判断模块,用于在所述加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,判断所述第一等待队列中位于所述加锁请求之后的第二加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;第二授权模块,用于在所述第二加锁请求请求的锁权限与所述已授权的锁权限如果不存在冲突,返回所述第二加锁请求的锁权限,并将所述第二加锁请求放入所述已授权队列。
[0025]结合第二方面或第二方面的第一种可能的实现方式至第二方面的第三种可能的实现方式中的任意一种,在第二方面的第四种可能的实现方式中,所述装置还包括:第四判断模块,用于在所述第一处理配额等于O时判断第二等待队列当前的第二处理配额是否大于0,所述第二等待队列中等待处理的加锁请求请求的锁权限与所述第一等待队列中等待处理的加锁请求请求的锁权限的类型不同;第五判断模块,用于在所述第二处理配额大于O时,判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;第三授权模块,用于在所述第三加锁请求请求的锁权限与所述已授权的锁权限不存在冲突时,返回所述第三加锁请求的锁权限,并将所述第三加锁请求放入所述已授权队列。
[0026]结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括:第六判断模块,用于在所述第三加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,判断所述第二等待队列中的位于所述第三加锁请求之后的第四加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;第四授权模块,用于所述第四加锁请求请求的锁权限与所述已授权的锁权限不冲突时,返回所述第四加锁请求的锁权限,并将所述第四加锁请求放入所述已授权队列。
[0027]结合第二方面的第四种可能的实现方式,在第二方面的第六种可能的实现方式中,所述装置还包括:第一配额恢复模块,用于在所述第二处理配额等于O时,将所述第一处理配额恢复至第一初始值,将所述第二处理配额恢复至第二初始值。
[0028]结合第二方面,在第二方面的第七种可能的实现方式中,所述装置还包括:第二控制模块,用于将所述加锁请求放入等待队列;所述第一判断模块具体用于:在所述加锁请求不是位于等待队列的队首时,若所述等待队列当前的优先处理配额大于0,判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;其中,所述优先处理配额为所述等待队列中当前允许被处理的不是位于所述等待队列队首的加锁请求的数量。
[0029]结合第二方面的第七种可能的实现方式,在第二方面的第八种可能的实现方式中,所述装置还包括:第二配额更新模块,用于在将所述加锁请求放入已授权队列之后将所述优先处理配额减I。
[0030]结合第二方面的第七种可能的实现方式,在第二方面的第九种可能的实现方式中,所述装置还包括:第五授权模块,用于在所述加锁请求位于所述等待队列的队首,或者,所述加锁请求不是位于所述等待队列的队首且所述等待队列当前的优选处理配额等于O时,若位于所述等待队列的加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,等待与所述位于所述等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理所述位于所述等待队列队首的加锁请求,并将所述位于所述等待队列队首的加锁请求放入所述已授权队列。
[0031]结合第二方面的第九种可能的实现方式,在第二方面的第十种可能的实现方式中,所述装置还包括:第二配额恢复模块,用于在将所述位于所述等待队列队首的加锁请求放入所述已授权队列之后将所述优先处理配额恢复至第三初始值。
[0032]本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0033]本发明实施例中,在接收到加锁请求时,如果确定该加锁请求请求的锁权限与当前已授权的锁权限不存在冲突,则可以对加锁请求进行授权,返回该加锁请求的锁权限,并将该加锁请求放入所述已授权队列,该加锁请求的发起方即可使用其所要求的权限。进而避免了因为在先的锁请求不能得到授权而导致在后的与已授权的锁权限不存在冲突的加锁请求不能获得授权的情形,提闻了共孚资源的访问效率。

【专利附图】

【附图说明】
[0034]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0035]图1为本发明实施例中锁请求处理方法的流程示意图;
[0036]图2为本发明实施例中锁请求处理方法的实施方式一流程示意图;
[0037]图3为本发明实施例中实施方式一的细化流程示意图;
[0038]图4为本发明实施例中实施方式一的另一细化流程示意图;
[0039]图5为本发明实施例中实施方式一的又一细化流程示意图;
[0040]图6为本发明实施例中锁请求处理方法的实施方式二流程示意图;
[0041]图7a为本发明实施例中锁请求处理方法的应用实例I的示意图;
[0042]图7b为本发明实施例中锁请求处理方法的应用实例I的示意图;
[0043]图8为本发明实施例中装置400的结构示意框图;
[0044]图9为本发明实施例中装置400的细化结构示意框图;
[0045]图10为本发明实施例中装置400的另一细化结构示意框图;
[0046]图11为本发明实施例中电子设备500的结构示意框图。

【具体实施方式】
[0047]针对现有技术中等待队列中的锁请求容易发生阻塞,导致共享资源的访问效率低下的技术问题,本发明实施例提供一种锁请求处理方法,包括:接收加锁请求,判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突;如果不存在冲突,则返回所述加锁请求的锁权限,并将所述加锁请求放入所述已授权队列。
[0048]本发明实施例中,在接收到加锁请求时,如果确定该加锁请求请求的锁权限与当前已授权的锁权限不存在冲突,则可以对加锁请求进行授权,返回该加锁请求的锁权限,并将该加锁请求放入所述已授权队列,该加锁请求的发起方即可使用其所要求的权限。上述技术方案避免了因为在先的锁请求不能得到授权而导致在后的与已授权的锁权限不存在冲突的加锁请求不能获得授权的情形,提闻了共孚资源的访问效率。
[0049]下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
[0050]参照图1,为本发明实施例提供的锁请求处理方法的流程示意图,该流程包括如下步骤:
[0051]步骤101:接收加锁请求,判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0052]步骤102:如果不存在冲突,则返回加锁请求的锁权限,并将加锁请求放入已授权队列。
[0053]具体的,本发明实施例中的锁管理器可以是集群系统中管理各节点对共享资源的访问行为的分布式锁管理器,也可以是集群系统中的一个节点上的用于管理该节点上的程序对共享资源的访问行为的单机锁管理器,还可以是单机系统中的单机锁管理器。
[0054]本发明实施例提供的方法可以应用于两种加锁请求环境,第一种应用环境中,力口锁请求方可以请求读权限,或者请求写权限,其中,读权限与其他读权限之间不冲突,写权限与读权限及其他写权限均冲突。因此,加锁请求请求的锁权限与当前已授权的锁权限存在冲突包括如下情形:已授权的锁权限包括读权限时,等待授权的加锁请求请求的写权限与之冲突,而请求的读权限与之不冲突;已授权的锁权限包括写权限时,等待授权的加锁请求请求的读权限和写权限均与之冲突。
[0055]第二种应用环境中,加锁请求方可以请求共享读权限、共享写权限、保护读权限、保护写权限,其中,保护写权限与其他所有权限相冲突,保护读权限与所有写权项相冲突。因此,加锁请求请求的锁权限与当前已授权的锁权限存在冲突包括如下情形:已授权的锁权限包括共享读权限时,等待授权的加锁请求请求的保护写权限与之冲突;已授权的锁权限包括共享写权限时,等待授权的加锁请求请求的保护读权限和保护写权限均与之冲突;已授权的锁权限包括保护读权限时,等待授权的加锁请求请求的共享写权限和保护写权限与之冲突;已授权的锁权限包括保护写权限时,等待授权的加锁请求请求的任何权限均与之冲突。
[0056]本发明实施例中,锁管理器在接收到加锁请求时,如果确定该加锁请求请求的锁权限与当前已授权的锁权限不存在冲突,则可以对加锁请求进行授权,返回该加锁请求的锁权限,并将该加锁请求放入所述已授权队列,该加锁请求的发起方即可使用加锁请求所要求的权限,对共享资源进行访问。因此,避免了因为在先的锁请求不能得到授权而导致在后的与已授权的锁权限不存在冲突的加锁请求不能获得授权的情形,提高了共享资源的访问效率。
[0057]上述技术方案实际实施时,在后的加锁请求的无节制授权可能会导致在前的加锁请求长期得不到授权,为了解决该问题,本发明实施例提供了锁请求处理方法的两种优选实施方式。
[0058]实施方式一
[0059]参见图2,为实施方式一的流程示意图,该流程包括如下步骤:
[0060]步骤201:接收加锁请求,将加锁请求放入第一等待队列,第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列,或者为用于存储等待处理的请求写权限的加锁请求的队列;
[0061]步骤202:判断第一等待队列当前的第一处理配额是否大于0,第一处理配额为第一等待队列中当前允许被处理的加锁请求的数量;如果大于0,则转向203 ;
[0062]步骤203:判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;如果不存在冲突,则转向步骤204 ;
[0063]步骤204:返回加锁请求的锁权限,并将加锁请求放入已授权队列。
[0064]实际情况中,无论是在第一种应用环境下,或是在第二种应用环境下,读权限的兼容性要好于写权限的兼容性,因此,如果不对请求读权限的加锁请求的授权数量加以限制,很可能出现长期存在已授权的读权限的情形,导致部分(第二种应用环境下)或全部(第一种应用环境下)的请求写权限的加锁请求长期得不到授权。
[0065]本发明实施例中,锁管理器可以根据加锁请求请求的权限为读权限还是写权限将接收的加锁请求分别放入两个等待队列。针对两个等待队列中的每一个等待队列设置有处理配额,只有在等待队列有处理配额的情况下,才会对该等待队列中的加锁请求进行处理。
[0066]上述技术方案中,通过针对第一等待队列设置处理配额,避免第一等待队列中加锁请求被无节制授权的情形。
[0067]进一步,继续参见图2,在步骤204执行之后,转向步骤205:将第一处理配额减I。通过执行步骤205,可以实时动态地调整第一等待队列的处理配额。
[0068]进一步,如果步骤202中判断出第一处理配额等于0,则转向步骤206:判断第二等待队列当前的第二处理配额是否大于0,第二等待队列中等待处理的加锁请求请求的锁权限与第一等待队列中等待处理的加锁请求请求的锁权限的类型不同;如果第二处理配额大于0,则转向步骤207 ;
[0069]步骤207:判断第二等待队列中的第三加锁请求请求的锁权限与已授权的锁权限是否存在冲突;若不冲突,则转向步骤208 ;
[0070]步骤208:返回第三加锁请求的锁权限,并将第三加锁请求放入已授权队列。
[0071]具体的,如果第一等待队列的第一处理配额等于0,而用于存放请求另一类权限的加锁请求的第二等待队列的第二处理配额大于0,则暂停处理第一等待队列中的加锁请求,转向处理第二等待队列中的加锁请求。
[0072]实际情况中,在两个等待队列的各自的处理配额没有用尽之前,均可对自身存放的加锁请求进行处理,若是一个等待队列的处理配额用尽,则应暂停处理该等待队列中的加锁请求,只处理还有处理配额的等待队列内的加锁请求。
[0073]上述技术方案中,能够保证在对一定数量的请求读权限的加锁请求进行授权时,有对应数量的请求写权限的加锁请求被授权,避免在先接收的请求写权限的加锁请求长期得不到授权。
[0074]进一步,步骤208之后,转向步骤209:将第二处理配额减I。通过执行步骤209,实现根据授权量动态地调整第二处理配额。
[0075]进一步,如果步骤206中判断出第二处理配额等于0,则转向步骤210:将第一处理配额恢复至第一初始值,将第二处理配额恢复至第二初始值。
[0076]具体的,如果第二处理配额等于0,则表明已经授权了第一初始值个请求的读权限的加锁请求和第二初始值个请求写权限的加锁请求(或者相反,授权了第一初始值个请求写权限的加锁请求和第二初始值个请求读权限的加锁请求),当前的读权限和写权限的处理比例分别达到设定的量值,保证了足够多的写权限被授权,将第一处理配额和第二处理配额恢复至初始值,恢复两个等待队列各自的处理能力,恢复对等待队列中不与已授权的锁权限冲突的加锁请求进行授权的能力,能够提高锁管理器的处理效率,提高共享资源的访问效率。
[0077]第一初始值和第二初始值的具体数值可以根据用户需要在一定时间内被授权的请求写权限的加锁请求的个数和请求读权限的加锁请求的个数来进行设置。
[0078]可选的,也可以在下面情况发生时转向步骤210,具体为:不妨假设第一等待队列为存放请求读权限的加锁请求的队列、第二等待队列为存放请求写权限的加锁请求的队列,只要在第二处理配额等于O时,不管第一处理配额是否等于0,转向执行步骤210。
[0079]具体来讲,由于写权限的兼容性较差,设置第一处理配额和第二处理配额的目的在于避免请求读权限的加锁请求被无节制的授权,导致请求写权限的加锁请求长期得不到授权。因此,在保证有相当数量的请求写权限的加锁请求被授权之后,就可以执行步骤210,将处理两个队列的加锁请求的能力恢复至最大能力。
[0080]实施方式一上述技术方案应用在第二种应用环境下时,同一个等待队列中的加锁请求请求的锁权限可能不同,因此,在一个等待队列中在先的加锁请求请求的锁权限与已授权的锁权限相冲突时,该加锁请求之后的加锁请求请求的锁权限可能与已授权的锁权限不冲突。例如,如果已授权的锁权限为3个共享读权限,而第二等待队列(不妨设第二等待队列为存放请求写请求的加锁请求的队列)中队首的加锁请求请求的锁权限为保护写权限,与已授权的共享读权项相冲突,不能获得授权,而第二等待队列的第二个加锁请求请求的锁权限为共享写权限,与已授权的共享读权项不冲突。为了提高共享资源的访问效率,此时可以在第二等待队列还有处理配额的情况下对其进行处理。
[0081]可选的,参见图3,如果步骤203中判断出加锁请求请求的锁权限与已授权的锁权限存在冲突,则转向步骤211:判断第一等待队列中位于加锁请求之后的第二加锁请求请求的锁权限与已授权的锁权限是否存在冲突;如果不存在冲突,则转向步骤212 ;
[0082]步骤212:返回第二加锁请求的锁权限,并将第二加锁请求放入已授权队列;
[0083]步骤212之后,转向步骤205。
[0084]对应的,参见图4,如果步骤207中判断出第三加锁请求请求的锁权限与已授权的锁权限存在冲突,则转向步骤213:判断第二等待队列中的位于第三加锁请求之后的第四加锁请求请求的锁权限与已授权的锁权限是否存在冲突;若不冲突,则转向步骤214 ;
[0085]步骤214:返回第四加锁请求的锁权限,并将第四加锁请求放入已授权队列;
[0086]步骤214之后,转向步骤209。
[0087]上述技术方案中,能够在第一或第二等待队列中在先的加锁请求请求的锁权限与已授权的锁请求存在冲突时,对该等待队列中在后的请求的锁权限与已授权的锁权限不冲突的加锁请求进行授权,提闻了共孚资源的访问效率,减少加锁请求方的等待时间。
[0088]由于第一等待队列(存放请求写权限的加锁请求的队列或者是存放请求读权限的加锁请求的队列)中的加锁请求请求的锁权限可能不同,因此,如果第一等待队列的队首的加锁请求请求的锁权限兼容性较差,而其后的加锁请求请求的锁权限兼容性较好,很可能导致第一等待队列中在后的加锁请求被过度授权,导致第一等待队列队首的加锁请求长期得不到授权的情形。例如,如果第一等待队列中队首的加锁请求请求保护写权限,而第2?9个加锁请求均是请求共享写权限,在已授权的锁权限为共享读权限的情况下,第一等待队列中的第2?9个加锁请求均不与已授权的锁权限冲突,在有第一处理配额的情况下均可以被授权,因此,第一处理配额很可能全部被在后的加锁请求占用,导致队首的加锁请求长期得不到授权。
[0089]为了解决该问题,可以针对第一等待队列设置一个优先处理配额,本发明实施例以下内容中称为第二优先处理配额,所谓第二优先处理配额指的是等待队列中当前允许被处理的不是位于队首的加锁请求的数量。只有在还有第二优先处理配额时,才对第一等待队列中的在后加锁请求进行处理。
[0090]可选的,参见图5,如果步骤203中判断出加锁请求请求的锁权限与已授权的锁权限存在冲突,则首先执行步骤215:判断第一等待队列当前的第二优先处理配额是否大于0,如果大于0,则转向步骤211 ;其中,第二优先处理配额为等待队列中当前允许被处理的不是位于队首的加锁请求的数量,第二优先处理配额小于第一处理配额。
[0091 ] 上述技术方案中,通过设置第二优先处理配额可以限制第一等待队列中在后的加锁请求的无节制授权。
[0092]进一步,在步骤212之后,转向步骤216:将第一处理配额及第二优先处理配额均减I。通过执行步骤216,可以根据第一等待队列中的加锁请求的被授权情况实时动态地调整第一处理配额和第二优先处理配额。
[0093]进一步,如果步骤215中判断出第二优先处理配额等于0,则转向步骤217:等待与位于第一等待队列的前M个加锁请求请求的锁权限相冲突的已授权的锁权限释放后,返回前M个加锁请求请求的锁权限,并将前M个加锁请求放入已授权队列,其中,M为第一处理配额与第二优先处理配额之间的差值。
[0094]具体的,将第一处理配额进一步划分,一部分作为第二优先处理配额,剩下的部分作为按照FIFO原则处理队首的加锁请求的配额,通过上述设置,能够保证在第一处理配额由第一初始值变为O的过程中,位于第一等待队列队首的加锁请求能够被授权,避免第一等待队列队首的加锁请求的等待时间过长。
[0095]进一步,步骤217之后,转向步骤218:将第二优先处理配额恢复至第四初始值。
[0096]具体的,在对前M个加锁请求进行授权之后,可以将第二优先处理配额恢复至第四初始值,进而在第一等待列表的第一处理配额大于O时恢复对在后的加锁请求的处理能力。其中,第四初始值的具体数值可以根据锁管理器的处理能力、用户的使用偏好、授权加锁请求存在周期的预期值等多个因素进行设置。如果第四初始值较小,则位于队首的加锁请求的平均等待时间较短,但是锁管理器整体的处理效率偏小,反之,如果第四初始值较大,则位于队首的加锁请求的平均等待时间较长,但是锁管理器整体的处理效率较高。
[0097]对应的,针对第二等待队列可以作与步骤215?218相一致的处理,本发明实施例在此不再详述。
[0098]实施方式二
[0099]参见图6,为实施方式二的流程示意图,该流程包括如下步骤:
[0100]步骤301:将加锁请求放入等待队列;
[0101]步骤302:在加锁请求不是位于等待队列的队首时,若等待队列当前的优先处理配额大于0,则判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;其中,优先处理配额为等待队列中当前允许被处理的不是位于等待队列队首的加锁请求的数量;如果不存在冲突,则转向步骤303 ;
[0102]步骤303:返回加锁请求的锁权限,并将加锁请求放入已授权队列。
[0103]具体地,锁管理器将接收到的加锁请求按照接收时间的顺序保存在等待队列中,位于等待队列的队首的加锁请求的接收时间最早。本发明实施例中,锁管理器可以在队首的加锁请求不能授权时处理在后的加锁请求,并对在后的请求的锁权限与已授权的锁权限不冲突的加锁请求进行授权,对于不是位于等待队列的队首的加锁请求被授权的情形,可以称为该加锁请求被优先授权。
[0104]实施方式二的技术方案中,虽然锁管理器可以处理不是位于等待队列的队首的加锁请求,但是必须是在当前还有优先处理配额的前提下,所谓优先处理配额指的是等待队列中当前允许被处理的不是位于队首的加锁请求的数量,通过设置优先处理配额可以限制在后的加锁请求的无节制授权。
[0105]可选的,如果步骤302中判断出加锁请求请求的锁权限与已授权的锁权限存在冲突,则可判断加锁请求之后的加锁请求请求的锁权限与已授权的锁权限是否存在冲突,并在不冲突时,对应地执行步骤303。在优先授权配额大于O时,通过逐个判断等待队列中的加锁请求请求的锁权限是否与已授权锁权限相冲突,能够使得等待队列中请求的锁权限与已授权锁权限不冲突的加锁请求被授权。
[0106]进一步,步骤303之后,转向步骤304:将优先处理配额减I。通过执行步骤304,可以根据等待队列中通过优先授权的方式被授权的加锁请求的数量实时动态地调整优先处理配额。
[0107]进一步,本申请实施例中,步骤301之后,还包括步骤305:加锁请求位于等待队列的队首,或者,加锁请求不是位于等待队列的队首且等待队列当前的优选处理配额等于O时,若位于等待队列的加锁请求请求的锁权限与已授权的锁权限存在冲突时,等待与位于等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理位于等待队列队首的加锁请求,并将位于等待队列队首的加锁请求放入已授权队列。
[0108]具体的,对于等待队列中不是位于队首的加锁请求,如果优先处理配额等于0,表明已经处理了足够多的在后加锁请求,此时暂停处理在后的加锁请求,转而处理位于队首的加锁请求,如果当前位于队首的加锁请求请求的锁权限与已授权的锁权限相冲突,则等待冲突的已授权的锁权限释放,然后返回队首的加锁请求的锁权限,并将队首的加锁请求放入已授权队列,使队首的加锁请求的发起方可以使用共享资源,避免队首的加锁请求长期得不到授权。
[0109]而对于位于等待队列队首的加锁请求,在其请求的锁权限与已授权的锁权限不冲突时可以立即被授权。
[0110]进一步,步骤305之后,转向步骤306:将优先处理配额恢复至第三初始值。
[0111]具体的,在将队首的加锁请求进行授权之后,可以将优先处理配额恢复至第三初始值,进而恢复对在后的加锁请求的处理能力。其中,第三初始值的具体数值可以根据锁管理器的处理能力、用户的使用偏好、授权加锁请求存在周期的预期值等多个因素进行设置。如果第三初始值较小,则位于队首的加锁请求的平均等待时间较短,但是锁管理器整体的处理效率偏小,反之,如果第三初始值较大,则位于队首的加锁请求的平均等待时间较长,但是锁管理器整体的处理效率较高。
[0112]上述步骤301?306的技术方案的一个变形方案为:
[0113]锁管理器将接收的加锁请求放置在一个等待队列中,对于不是位于等待队列的队首的加锁请求被授权的情形,称为该加锁请求被优先授权,而对于位于等待队列队首的加锁请求被授权的情形,称为正常授权。设置有两个计数器,分别统计优先授权的加锁请求的个数K和正常授权的加锁请求的个数L。当K达到第一设定阈值时,暂停对在后加锁请求的优先授权,只处理位于队首的加锁请求,等到L值达到第二设定阈值时,将K值和L值均恢复为0,恢复对在后的加锁请求的处理能力。当L等于I时,对应于步骤301?306的技术方案。
[0114]实际情况中,如果L先达到第二设定阈值,可以等待K达到第一设定阈值之后,再将K和L均设置为O ;也可以是在L达到第二设定阈值之后,不管K是否达到第一设定阈值,均将K和L设置为O。
[0115]为了更清楚的理解本发明的技术方案,下面以具体应用实例对本申请实施例提供的上述锁请求处理方法的流程进行详细描述。
[0116]应用实例I
[0117]参见图7a,假设当前已授权的加锁请求为LK1,Lei请求的锁权限为读权限,当前等待授权的加锁请求为Lwi和LW2,Lwi和Lw2均请求写权限,由于Lwi和Lw2请求的写权限与Lw已经授权的读权限冲突,不能被授权,均在用于存在请求写权限的加锁请求的第二等待队列中等待授权处理,此时,没有等待授权的请求读权限的加锁请求。
[0118]在时刻T1,锁管理器接收到加锁请求LK2,Lk2请求的锁权限为读权限,将其放入用于存放请求读权限的加锁请求的第一等待队列。当前,第一等待队列的第一处理配额为2,因此可以对Lk2进行处理,由于Lk2请求的读权限与Lki已经授权的读权限不冲突,因此可以对Lk2进行授权,将Lk2从第一等待队列移入已授权队列,并将第一处理配额减1,第一处理配额更新为I。
[0119]在时刻T1之后的时刻T2,锁管理器接收到加锁请求LK3,Le3请求的锁权限为读权限,被放入第一等待队列,由于第一处理配额大于0,同样地,对Lk3进行授权,将Lk3从第一等待队列移入已授权队列,并将第一处理配变更为O。
[0120]在时刻T2之后的时刻T3,锁管理器接收到加锁请求Lk4,Le4请求的锁权限为读权限,被放入第一等待队列,由于此时第一处理配额等于0,因此不能对第一等待队列中的加锁请求Lk4进行处理,只有等待第二等待队列的第二处理配额也变为O后,对第一处理配额和第二处理配额进行复原之后,才能继续处理Lk4。
[0121]而当前第二处理配额为2,因此,只有等到已授权的LK1、LK2、LK3释放后,对Lwi进行授权,而等Lwi释放后对Lw2进行授权,此时第二处理配额等于0,可以将第一处理配额恢复至初始值5,将第二处理配额恢复至初始值3。虽然此时第一等待队列的第一处理配额恢复为5,可以对等待的L4进行处理,但是L4请求的读权限与Lw2已经授权的写权限冲突,因此,在Lw2释放之后,才能对Lk4进行授权。
[0122]在应用实例I中,在锁管理器先接收到的加锁请求Lwi不能授权的情况下,可以对后接收于已授权加锁请求没有权限冲突的加锁请求Lk2和Lk3进行授权,提高了共享资源的访问效率。而且,通过对两个等待列表设置处理配额,能够保证有一定数量的请求写权限的加锁请求被授权,避免在先的请求写权限的加锁请求长期得不到授权。
[0123]应用实例2
[0124]参见图7b,在第二等待队列中加锁请求请求的锁权限不同时,可以在第二处理配额大于O时,在队首的加锁请求不能授权时对第二等待队列中其他可以授权的加锁请求进行授权。
[0125]例如,在前述时刻T3之后的时刻T4,接收到加锁请求LW3,Lw3请求的锁权限为保护读权限,与之不同,Lffl和Lw2均请求保护写权限,而LK1、Le2, Le3均请求共享读权限,因此,在将Lw3放入第二等待队列之后,由于Lw3请求的共享写权限与Lk1、Le2, Le3已授权的共享读权限不冲突,且第二处理配额为2,虽然位于L13之前的Lwi和Lw2不能被授权,仍然可以对Lw3进行授权,将Lw3移入已授权队列,将第一处理配额更新为I。
[0126]优选的,针对第二等待队列设置优先授权配额,优先设置配额的初始值为1,即,第一处理配额中的I个可以被用于优先授权,而另外两个配额必须用于处理队首的加锁请求。因此,在对L13进行优先授权之后,优先授权配额更新为0,在T4之后的时刻T5,锁管理器又接收到请求共享写权限的加锁请求Lw4,虽然T5时刻第一处理配额为1,但是优先处理配额已经变为0,因此,即使Lw4请求的共享写权限与LK1、Le2, Le3已授权的共享读权限不冲突,但是仍然不能通过优先授权的方式对L14进行授权。
[0127]在应用实例2中,在存放请求写权限的加锁请求的第二等待列表内,在还有第二处理配额时,能够对不是位于队首的与已授权的锁权限不冲突的加锁请求进行授权,能够进一步提供共享资源的访问效率。另外,可以设置优先授权配额,对优先授权行为加以限制,能够保证位于第二等待列表队首的加锁请求在一定时间内能够被授权,避免第二处理配额全部被优先授权的加锁请求所占用时队首的加锁请求长期得不到授权的情形。
[0128]基于相同的发明构思,本发明实施例还提供了一种装置400,参照图8,装置400包括第一判断模块401和第一授权模块402。
[0129]其中,第一判断模块401用于判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0130]第一授权模块402用于在加锁请求请求的锁权限与已授权的锁权限不存在冲突时,返回加锁请求的锁权限,并将加锁请求放入已授权队列。
[0131]可选的,参见图9,装置400还包括:
[0132]第一控制模块403,用于将加锁请求放入第一等待队列,第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列;
[0133]第二判断模块404,用于判断第一等待队列当前的第一处理配额是否大于0,第一处理配额为第一等待队列中当前允许被处理的加锁请求的数量;
[0134]其中,如果第二判断模块404的判断结果表明第一处理配额大于0,则通过第一判断模块401判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突。
[0135]可选的,装置400还包括:
[0136]第一配额更新模块405,用于在返回加锁请求的锁权限之后,将第一处理配额减丄O
[0137]可选的,继续参见图9,装置400还包括:
[0138]第三判断模块406,用于在加锁请求请求的锁权限与已授权的锁权限存在冲突时,判断第一等待队列中位于加锁请求之后的第二加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0139]第二授权模块407,用于在第二加锁请求请求的锁权限与已授权的锁权限如果不存在冲突,返回第二加锁请求的锁权限,并将第二加锁请求放入已授权队列。
[0140]可选的,装置400还包括:
[0141]第四判断模块408,用于在第一处理配额等于O时判断第二等待队列当前的第二处理配额是否大于0,第二等待队列中等待处理的加锁请求请求的锁权限与第一等待队列中等待处理的加锁请求请求的锁权限的类型不同;
[0142]第五判断模块409,用于在第二处理配额大于O时,判断第二等待队列中的第三加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0143]第三授权模块410,用于在第三加锁请求请求的锁权限与已授权的锁权限不存在冲突时,返回第三加锁请求的锁权限,并将第三加锁请求放入已授权队列。
[0144]可选的,装置400还包括:
[0145]第六判断模块411,用于在第三加锁请求请求的锁权限与已授权的锁权限存在冲突时,判断第二等待队列中的位于第三加锁请求之后的第四加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0146]第四授权模块412,用于第四加锁请求请求的锁权限与已授权的锁权限不冲突时,返回第四加锁请求的锁权限,并将第四加锁请求放入已授权队列。
[0147]可选的,装置400还包括:第三配额更新模块,用于在将第三加锁请求或第四加锁请求放入已授权队列时,将第二处理配额减I。
[0148]可选的,装置400还包括:
[0149]第一配额恢复模块413,用于在第二处理配额等于O时,将第一处理配额恢复至第一初始值,将第二处理配额恢复至第二初始值。
[0150]可选的,参见图10,装置400还包括:
[0151]第二控制模块414,用于将加锁请求放入等待队列,
[0152]第一判断模块401具体用于:在加锁请求不是位于等待队列的队首时,若等待队列当前的优先处理配额大于0,判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;其中,优先处理配额为等待队列中当前允许被处理的不是位于等待队列队首的加锁请求的数量。
[0153]可选的,装置400还包括:
[0154]第二配额更新模块415,用于在将加锁请求放入已授权队列之后将优先处理配额减I。
[0155]可选的,装置400还包括:
[0156]第五授权模块416,用于在加锁请求位于等待队列的队首,或者,加锁请求不是位于等待队列的队首且等待队列当前的优选处理配额等于O时,若位于等待队列的加锁请求请求的锁权限与已授权的锁权限存在冲突时,等待与位于等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理位于等待队列队首的加锁请求,并将位于等待队列队首的加锁请求放入已授权队列。
[0157]可选的,装置400还包括:
[0158]第二配额恢复模块417,用于在将位于等待队列队首的加锁请求放入已授权队列之后将优先处理配额恢复至第三初始值。
[0159]本实施例中的装置400与前述实施例中的加锁请求处理方法是基于同一发明构思下的两个方面,在前面已经对方法的实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施例中的装置400的结构及实施过程,为了说明书的简洁,在此就不再赘述了。
[0160]本发明实施例另一方面还提供了一种电子设备500,参照图11,电子设备500包括:
[0161]总线540 ;以及连接到总线540的处理器510、存储器520和接口 530,其中,接口530用于连接电子设备500所处的集群系统中的成员节点(即计算机集群系统中的物理设备);存储器520用于存储指令,处理器510用于执行该指令,当处理器510执行该指令时,执行以下步骤:
[0162]接收加锁请求,判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0163]如果不存在冲突,则返回加锁请求的锁权限,并将加锁请求放入已授权队列。
[0164]可选的,处理器510执行指令,在判断加锁请求请求的锁权限与已授权锁的锁权限是否存在冲突之前,还包括如下步骤:
[0165]将加锁请求放入第一等待队列,第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列;
[0166]判断第一等待队列当前的第一处理配额是否大于0,第一处理配额为第一等待队列中当前允许被处理的加锁请求的数量;
[0167]如果第一处理配额大于0,则执行判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突的步骤。
[0168]可选的,处理器510执行指令,在返回加锁请求的锁权限之后,还包括如下步骤:
[0169]将第一处理配额减I。
[0170]可选的,处理器510执行指令,在判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突之后,还包括如下步骤:
[0171]如果加锁请求请求的锁权限与已授权的锁权限存在冲突,则判断第一等待队列中位于加锁请求之后的第二加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0172]如果不存在冲突,则返回第二加锁请求的锁权限,并将第二加锁请求放入已授权队列。
[0173]可选的,处理器510执行指令,还包括如下步骤:
[0174]如果第一处理配额等于0,判断第二等待队列当前的第二处理配额是否大于0,第二等待队列中等待处理的加锁请求请求的锁权限与第一等待队列中等待处理的加锁请求请求的锁权限的类型不同;
[0175]如果第二处理配额大于0,则判断第二等待队列中的第三加锁请求请求的锁权限与已授权的锁权限是否存在冲突;
[0176]若不冲突,则返回第三加锁请求的锁权限,并将第三加锁请求放入已授权队列。
[0177]可选的,处理器510执行指令,在判断第二等待队列中的第三加锁请求请求的锁权限与已授权的锁权限是否存在冲突之后,还包括如下步骤:
[0178]如果第三加锁请求请求的锁权限与已授权的锁权限存在冲突,则判断第二等待队列中的位于第三加锁请求之后的第四加锁请求请求的锁权限与已授权的锁权限是否存在冲关;
[0179]若不冲突,则返回第四加锁请求的锁权限,并将第四加锁请求放入已授权队列。
[0180]可选的,处理器510执行指令,在判断第二等待队列当前的处理配额是否大于O之后,还包括如下步骤:
[0181]如果第二处理配额等于0,则将第一处理配额恢复至第一初始值,将第二处理配额恢复至第二初始值。
[0182]可选的,处理器510执行指令,在判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突之前,还包括如下步骤:
[0183]将加锁请求放入等待队列;
[0184]在加锁请求不是位于等待队列的队首时,若等待队列当前的优先处理配额大于0,则执行判断加锁请求请求的锁权限与已授权的锁权限是否存在冲突的步骤;其中,优先处理配额为等待队列中当前允许被处理的不是位于等待队列队首的加锁请求的数量。
[0185]可选的,处理器510执行指令,在将加锁请求放入已授权队列之后,还包括如下步骤:
[0186]将优先处理配额减I。
[0187]可选的,处理器510执行指令,还包括如下步骤:
[0188]加锁请求位于等待队列的队首,或者,加锁请求不是位于等待队列的队首且等待队列当前的优选处理配额等于O时,若位于等待队列的加锁请求请求的锁权限与已授权的锁权限存在冲突时,等待与位于等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理位于等待队列队首的加锁请求,并将位于等待队列队首的加锁请求放入已授权队列。
[0189]可选的,处理器510执行指令,在将位于等待队列队首的加锁请求放入已授权队列之后,还包括如下步骤:
[0190]将优先处理配额恢复至第三初始值。
[0191]本实施例中的电子设备500与前述实施例中的加锁请求处理方法是基于同一发明构思下的两个方面,在前面已经对方法的实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施例中的电子设备500的结构及实施过程,为了说明书的简洁,在此就不再赘述了。
[0192]本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0193]本发明实施例中,在接收到加锁请求时,如果确定该加锁请求请求的锁权限与当前已授权的锁权限不存在冲突,则可以对加锁请求进行授权,返回该加锁请求的锁权限,并将该加锁请求放入所述已授权队列,该加锁请求的发起方即可使用其所要求的权限。进而避免了因为在先的锁请求不能得到授权而导致在后的与已授权的锁权限不存在冲突的加锁请求不能获得授权的情形,提闻了共孚资源的访问效率。
[0194]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0195]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0196]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0197]尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0198]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种锁请求处理方法,其特征在于,包括: 接收加锁请求,判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突; 如果不存在冲突,则返回所述加锁请求的锁权限,并将所述加锁请求放入已授权队列。
2.如权利要求1所述的方法,其特征在于,判断所述加锁请求请求的锁权限与已授权锁的锁权限是否存在冲突之前,所述方法还包括: 将所述加锁请求放入第一等待队列,所述第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列; 判断所述第一等待队列当前的第一处理配额是否大于O,所述第一处理配额为所述第一等待队列中当前允许被处理的加锁请求的数量; 如果所述第一处理配额大于O,则执行判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突的步骤。
3.如权利要求2所述的方法,其特征在于,所述返回所述加锁请求的锁权限之后,所述方法还包括: 将所述第一处理配额减I。
4.如权利要求3所述的方法,其特征在于,在判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突之后,所述方法还包括: 如果所述加锁请求请求的锁权限与所述已授权的锁权限存在冲突,则判断所述第一等待队列中位于所述加锁请求之后的第二加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 如果不存在冲突,则返回所述第二加锁请求的锁权限,并将所述第二加锁请求放入所述已授权队列。
5.如权利要求2-4中任一权利要求所述的方法,其特征在于,所述方法还包括: 如果所述第一处理配额等于O,判断第二等待队列当前的第二处理配额是否大于O,所述第二等待队列中等待处理的加锁请求请求的锁权限与所述第一等待队列中等待处理的加锁请求请求的锁权限的类型不同; 如果所述第二处理配额大于O,则判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 若不冲突,则返回所述第三加锁请求的锁权限,并将所述第三加锁请求放入所述已授权队列。
6.如权利要求5所述的方法,其特征在于,在判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突之后,所述方法还包括: 如果所述第三加锁请求请求的锁权限与所述已授权的锁权限存在冲突,则判断所述第二等待队列中的位于所述第三加锁请求之后的第四加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 若不冲突,则返回所述第四加锁请求的锁权限,并将所述第四加锁请求放入所述已授权队列。
7.如权利要求5所述的方法,其特征在于,在判断第二等待队列当前的处理配额是否大于O之后,所述方法还包括: 如果所述第二处理配额等于O,则将所述第一处理配额恢复至第一初始值,将所述第二处理配额恢复至第二初始值。
8.如权利要求1所述的方法,其特征在于,在判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲突之前,所述方法还包括: 将所述加锁请求放入等待队列; 在所述加锁请求不是位于等待队列的队首时,若所述等待队列当前的优先处理配额大于O,则执行判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突的步骤;其中,所述优先处理配额为所述等待队列中当前允许被处理的不是位于所述等待队列队首的加锁请求的数量。
9.如权利要求8所述的方法,其特征在于,在将所述加锁请求放入已授权队列之后,所述方法还包括: 将所述优先处理配额减I。
10.如权利要求8所述的方法,其特征在于,所述方法还包括: 所述加锁请求位于所述等待队列的队首,或者,所述加锁请求不是位于所述等待队列的队首且所述等待队列当前的优选处理配额等于O时,若位于所述等待队列的加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,等待与所述位于所述等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理所述位于所述等待队列队首的加锁请求,并将所述位于所述等待队列队首的加锁请求放入所述已授权队列。
11.如权利要求10所述的方法,其特征在于,在将所述位于所述等待队列队首的加锁请求放入所述已授权队列之后,所述方法还包括: 将所述优先处理配额恢复至第三初始值。
12.一种装置,其特征在于,包括: 第一判断模块,用于判断所述加锁请求请求的锁权限与已授权的锁权限是否存在冲关; 第一授权模块,用于在所述加锁请求请求的锁权限与已授权的锁权限不存在冲突时,返回所述加锁请求的锁权限,并将所述加锁请求放入已授权队列。
13.如权利要求12所述的装置,其特征在于,还包括: 第一控制模块,用于将所述加锁请求放入第一等待队列,所述第一等待队列为用于存储等待处理的请求读权限的加锁请求的队列或者为用于存储等待处理的请求写权限的加锁请求的队列; 第二判断模块,用于判断所述第一等待队列当前的第一处理配额是否大于0,所述第一处理配额为所述第一等待队列中当前允许被处理的加锁请求的数量; 其中,如果所述第二判断模块的判断结果表明所述第一处理配额大于0,则通过所述第一判断模块判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突。
14.如权利要求13所述的装置,其特征在于,还包括: 第一配额更新模块,用于在返回所述加锁请求的锁权限之后,将所述第一处理配额减1
15.如权利要求14所述的装置,其特征在于,还包括: 第三判断模块,用于在所述加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,判断所述第一等待队列中位于所述加锁请求之后的第二加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 第二授权模块,用于在所述第二加锁请求请求的锁权限与所述已授权的锁权限如果不存在冲突,返回所述第二加锁请求的锁权限,并将所述第二加锁请求放入所述已授权队列。
16.如权利要求13-15中任一权利要求所述的装置,其特征在于,还包括: 第四判断模块,用于在所述第一处理配额等于O时判断第二等待队列当前的第二处理配额是否大于O,所述第二等待队列中等待处理的加锁请求请求的锁权限与所述第一等待队列中等待处理的加锁请求请求的锁权限的类型不同; 第五判断模块,用于在所述第二处理配额大于O时,判断所述第二等待队列中的第三加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 第三授权模块,用于在所述第三加锁请求请求的锁权限与所述已授权的锁权限不存在冲突时,返回所述第三加锁请求的锁权限,并将所述第三加锁请求放入所述已授权队列。
17.如权利要求16所述的装置,其特征在于,还包括: 第六判断模块,用于在所述第三加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,判断所述第二等待队列中的位于所述第三加锁请求之后的第四加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突; 第四授权模块,用于所述第四加锁请求请求的锁权限与所述已授权的锁权限不冲突时,返回所述第四加锁请求的锁权限,并将所述第四加锁请求放入所述已授权队列。
18.如权利要求16所述的装置,其特征在于,还包括: 第一配额恢复模块,用于在所述第二处理配额等于O时,将所述第一处理配额恢复至第一初始值,将所述第二处理配额恢复至第二初始值。
19.如权利要求12所述的装置,其特征在于,还包括: 第二控制模块,用于将所述加锁请求放入等待队列; 所述第一判断模块具体用于:在所述加锁请求不是位于等待队列的队首时,若所述等待队列当前的优先处理配额大于O,判断所述加锁请求请求的锁权限与所述已授权的锁权限是否存在冲突;其中,所述优先处理配额为所述等待队列中当前允许被处理的不是位于所述等待队列队首的加锁请求的数量。
20.如权利要求19所述的装置,其特征在于,还包括: 第二配额更新模块,用于在将所述加锁请求放入已授权队列之后将所述优先处理配额减I。
21.如权利要求19所述的装置,其特征在于,还包括: 第五授权模块,用于在所述加锁请求位于所述等待队列的队首,或者,所述加锁请求不是位于所述等待队列的队首且所述等待队列当前的优选处理配额等于O时,若位于所述等待队列的加锁请求请求的锁权限与所述已授权的锁权限存在冲突时,等待与所述位于所述等待队列队首的加锁请求请求的锁权限冲突的已授权的锁权限释放后,处理所述位于所述等待队列队首的加锁请求,并将所述位于所述等待队列队首的加锁请求放入所述已授权队列。
22.如权利要求21所述的装置,其特征在于,还包括: 第二配额恢复模块,用于在将所述位于所述等待队列队首的加锁请求放入所述已授权队列之后将所述优先处理配额恢复至第三初始值。
【文档编号】G06F9/46GK104461707SQ201410714580
【公开日】2015年3月25日 申请日期:2014年11月28日 优先权日:2014年11月28日
【发明者】范颂颂, 冯锐 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1