管理对在多个处理器间共享的资源的锁的方法和系统的制作方法
【专利摘要】本发明提供了管理对在多个处理器间共享的资源的锁的计算机程序产品、系统和方法。存储器中的槽实施对共享资源的锁。槽对应于连续编号的计数器值并且表示忙或空闲之一。请求处理器获取计数器值。进行对应于所获取的计数器值的槽是否表示空闲的判断。响应于与所获取的计数器值相对应的槽表示不空闲的判断,请求处理器的处理器标识符被插入到与所获取的计数器值相对应的槽中。响应于与所获取的计数器值相对应的槽表示空闲的判断,请求处理器访问共享资源。
【专利说明】管理对在多个处理器间共享的资源的锁的方法和系统
【技术领域】
[0001]本发明涉及管理对在多个处理器间共享的资源的锁的计算机程序产品、系统和方法。
【背景技术】
[0002]锁被用在在多重处理器环境下执行的共享存储器的并行程序中,以为每次仅可由一个处理器执行的非并行部分代码提供相互排他性。一种现有技术的锁是自旋锁,诸如测试及置位(Test and Set)锁。取得锁的第一用户可以访问非并行代码,并且其他处理必须不间断地检查(即,自旋)锁来确定锁何时可用。即使在其他处理器已经等待了更长时间时,在锁变得可用之后进行检查的第一个处理器仍然可以拿取锁。
[0003]另一种类型的锁是基于阵列的队列锁算法。每个锁对于每个处理器都需要计数器以及自旋位置或者缓存线。计数器值向槽提供地址。在锁初始化之后,自旋位置(又叫做槽)被设置为忙,除了第一位置(槽O)被设置为空闲,并且具有与该槽对应的值的计数器被设置为O。寻找锁的第一处理器在计数器上进行原子获取及递增(atomic fecth_and_increment)操作,以得到计数器值并之后增加计数器值。所获取的计数器值提供处理器将要访问或在其上自旋的槽的地址或编号。
[0004]发出请求的处理器检查具有零值的计数器并且访问与零计数器值相对应的第一槽。如果该槽是空闲的,那么处理器已经取得锁并且随后为了下一次使用该槽而将槽设置为忙。如果槽不是空闲的,那么请求处理器在槽上自旋,直到其空闲。当处理器释放锁时,下一个槽被设置为空闲。
[0005]这种基于阵列的队列锁对于每个槽使用一个缓存线,使得每个处理器可以在槽上自旋直到该槽被设置为空闲。随着锁的数目增加(因为对于每个锁来说,对于每个槽都需要缓存线)或者随着处理器的数目增加,该技术可能需要大量的存储器资源。
[0006]现有技术中需要管理对共享资源的锁的改善技术。
【发明内容】
[0007]提供了一种用于管理对在多个处理器间共享的资源的锁的计算机程序产品、系统和方法。存储器中的槽实施对共享资源的锁。所述槽对应于连续编号的计数器值并且表示忙或空闲之一。发请求的处理器获取包括所获取的计数器值的计数器值。进行对应于所获取的计数器值的槽是否表示空闲的判断。响应于与所获取的计数器值相对应的槽表示不空闲的判断,发请求的处理器的处理器标识符被插入到与所获取的计数器值相对应的槽中。响应于与所获取的计数器值相对应的槽表示空闲的判断,发请求的处理器访问共享资源。
【专利附图】
【附图说明】
[0008]图1示出了计算环境的实施例。
[0009]图2示出了锁初始化代码和非并行代码部分的实施例。[0010]图3示出了对关于锁的数据结构进行初始化的操作的实施例。
[0011]图4示出了请求锁的操作的实施例。
[0012]图5示出了释放锁的操作的实施例。
【具体实施方式】
[0013]所描述的实施例提供了用于管理对共享资源(诸如在多重处理环境中可以由多个处理器执行的非并行代码)的锁的技术。锁提供多个槽,在任何时候,这些槽全部忙或者仅有一个槽表示空闲。如果处理器请求锁并且发现在之前被访问的槽之后的槽为忙,那么处理器插入其标识符,使得在锁空闲时该处理器可以得到通知。在等待锁期间,发请求的处理器在该处理器的自旋位置上自旋,直到该锁被释放。通过提供与该处理器的槽相分离的自旋位置,用于锁的多个槽可以实施在单个缓存线中,以节约存储器资源,这是因为处理器在等待锁期间在它们的自旋位置上而非在槽上自旋。
[0014]图1示出了具有经由总线8与共享存储器6连接的多个处理器4f4n的系统2的实施例。处理器4^.4η可以执行共享存储器资源10,其可以包括数据结构、参数和代码。在特定实施例中,共享存储器资源10可以包括处理器4^4n可以并行执行的并行代码以及每次仅可以由处理器4^4n之一执行的非并行代码。锁管理器12包括由处理器4^4n执行来管理锁(诸如自旋锁)的代码,该锁必须被保持以访问共享存储器资源10。
[0015] 存储器6包括用于一个或多个锁14的数据结构,锁14包括多个槽0...η以及计数器16。计数器16可以具有与槽0...η相对应的值。在一个实施例中,如果存在O…η个槽,那么将会存在计数器值0...η。每个槽表示:锁为忙,等待锁的处理器4^..4η的处理器标识符;或者锁为空闲。在一个实施例中,存在相同数目的槽和处理器,例如,η+1个,因此,每个处理器4^..4η可以具有独立的槽O…η,以得到用于共享资源的锁14。
[0016]存储器6还包括用于处理器4f4n的自旋位置18,其中对于η+1个处理器4f-4n中的每一个存在自旋位置O…η之一。如果处理器4^..4η试图在锁不空闲时得到锁14,那么处理器4^4n自旋或者不间断地检查用于处理器4^..4η的自旋位置0...η是否表示空闲,空闲意味着处理器七…宄可以得到锁及访问共享资源。
[0017]在一个实施例中,对于每个自旋位置O…η存在一个缓存线。此外,在一个实施例中,槽0...η中的多个可以被实施在一个缓存线中。例如,如果缓存线是64字节并且每个槽是4字节,那么在每个缓存线中可以实施15个槽0...η。通过在一个缓存线中实施多个槽O…η,所描述的实施例节约了存储器6的资源,这在存在多个锁、每个锁具有槽0...η时可以
非常有意义。
[0018]在一个实施例中,处理器七…宄可以包括独立的中央处理单元(CPU)或微处理器单元。在替换实施例中,处理器4y4n中的一些或全部可以包括在单个CPU上的核心。在一个实施例中,全部的处理器七…宄都在相同的系统2中。在替换实施例中,处理器七…宄可以在远程系统中并且可以经由网络通信。
[0019]共享存储器6可以包括一个或多个易失性存储装置,诸如动态随机存取存储器(DRAM)、随机存取存储器(RAM),或者非易失性存储器,例如,有备用电池的随机存取存储器(RAM)、静态RAM (SRAM)、固态存储装置(SSD)等。
[0020]总线8可以包括本领域中已知的总线或数据传输系统,诸如周边组件互连(PCI)型总线。
[0021]在一个实施例中,共享存储器资源10可以包括数据结构、值和/或处理器4^4n希望执行的代码。在替换实施例中,共享存储器资源10可以包括系统2中处理器七…宄可能希望访问的装置或硬件组件。或者,共享存储器资源可以在一个或多个处理器七…宄的外部系统中。此外,共享存储器装置可以在系统2内、与系统2直接连接或者相对于系统2远程布置。
[0022]图2示出了共享存储器资源10包括每次仅可以由处理器七…宄之一执行的非并行代码30的实施例。处理器4^.4η中的一者或多者执行锁初始化代码32,以初始化用于锁14的槽O…η以及初始化用于处理器4^4n的自旋位置O…η。非并行代码部分34包括:请求自旋锁36和释放自旋锁38的锁管理操作,以及要被执行的非并行代码30。发请求的处理器4^4n执行请求自旋锁例程36,直到其获得用于非并行代码30的锁14为止。在执行非并行代码30之后,保持锁14的执行处理器4^.4η执行释放自旋锁例程38,以释放在非并行代码30上的锁14,以使得另一个处理器4f4n能够执行代码30。在一个实施例中,可以为每个非并行代码部分30都提供独立的锁14,在这个情况下非并行代码30的不同部分可以被独立地执行。但是每次仅有一个处理器4^4n可以执行特定的非并行代码30部分。
[0023]图3示出了锁管理器12进行操作的实施例,该实施例由处理器4^..4η中的一者或多者执行,以进行锁初始化代码32的操作。在初始化用于管理锁的数据结构和参数的初始化操作之后(在框100处),处理器4f4n中的至少一个分别为处理器4f4n中每一个初始化自旋位置0...η (在框102)。该操作可以在产生任何锁之前的处理器初始化期间进行,或者可以在产生第一锁时进行。对于用于共享非并行部分34的每个锁,处理器4^.4η中的至少一个进行框106到 框112的操作循环(框104-框114)。在框106,锁管理器12产生分别用于每个处理器七…4η的槽O…η。第一槽O被设置为空闲(在框108处)并且全部的其他槽1...η被设置为忙值(在框110处)。计数器16被设置为与槽O相对应的O (在框112处)。
[0024]在图3的操作之后,自旋位置18和锁14数据结构被生成,并准备好被用于来自处理器4^..4η的、访问非并行代码30的锁请求。
[0025]图4示出了由处理器七…4η之一(被称为发请求的处理器)进行的操作实施例,该发请求的处理器执行请求自旋锁例程36,以得到锁来能够访问共享资源,例如,非并行代码30。在初始化请求锁的操作之后(在框130处),发请求的处理器确定用于被请求的锁14的计数器16的所获取的计数器值(在框132处),并且递增计数器(在框134)。框132和134的确定计数器值并递增计数器的这些操作可以作为单个原子获取及递增(single atomicfetch_and_increment)操作的一部分。如果(在框136处)对应于所获取的计数器值i的槽i表示空闲,那么请求处理器将槽i设置为忙值(在框138处)并且返回对于所考虑的槽i的计数器值i (也被称作为槽位置)(在框140处)。就此,请求处理器取得对共享资源10的锁(在框142处)。
[0026]如果(在框136处)槽i表示锁14是忙值,即,不包括处理器标识符,那么请求处理器设置自旋位置0...η中请求处理器j的自旋位置j为忙(在框144处)。如果槽i表示忙,那么发请求的处理器j将请求处理器的处理器标识符插入到与计数器值i相对应的槽i(在框146处)。在一个实施例中,在框146处的操作可以包括原子比较及交换(atomiccompare_and_swap)命令。请求处理器j不间断地检查其自旋位置j (例如,在其自旋位置j上自旋),以判断自旋位置j表示忙还是空闲(在框148处)。如果(在框148处)自旋位置j表示忙,那么请求处理器j继续自旋并检查自旋位置j。如果(在框148处)自旋位置j表示空闲,那么控制进行到框138,以进行取得锁和共享资源的操作,例如,执行非并行代码。
[0027]整数值i和j可以都包括任何整数值,并且可以是在值0...η的范围内的相同或不同值。
[0028]在所描述的实施例的某些实施例中,发请求的处理器在其自身的自旋位置上自旋,其自旋位置可以包括缓存线。以此方式,因为处理器不在槽0...η上自旋,所以多个槽O…η可以被实施在单个缓存线中。
[0029]图5示出了由处理器4^..4η之一(被称作为保持处理器)进行的操作实施例,该保持处理器在完成执行非并行代码30时执行释放自旋锁38例程,以释放锁14,来允许其他处理器七…宄得到锁。在初始化释放锁的操作(例如,执行释放自旋锁38例程)之后(在框170处),保持处理器确定(在框172处)在请求锁时处理的槽(例如,槽i)的计数器16值(所返回的槽位置)。保持处理器确定(在框174处)下一个计数器值,例如按顺序在所确定的计数器值i之后的i+Ι,计数器值i对应于在先由保持处理器访问的、用以获得锁的槽i。如果(在框176处)对应于下一个计数器值(i+Ι)的下一个槽(i+Ι)具有忙值,那么保持处理器将下一个槽设置为表示空闲(在框178处)。具有忙值意味着,没有在不成功地请求锁时将其处理器标识符包括在槽0...η中的正在等待的处理器。在一个实施例中,在框176和178处的操作可以由比较及交换(compare-and-swap)操作来进行,在框176和178处的操作为:比较下一个槽(i+1 ),以判断其是否具有忙值,并且如果是的话,将空闲值交换到该槽中。如果没有发生交换,即,如果下一个槽不是忙值,则通过比较并交换而返回得到的值是下一个处理器ID (在框182处)。
[0030]如果(在框176处)下一个槽(i+Ι)不具有忙值,这表示下一个槽包括处理器标识符,那么保持处理器确定在所获取的下一个槽(i+Ι)中表示的处理器标识符(在步骤182处)。保持处理器随后通知处理器4^4?中具有该处理器标识符的处理器所述锁是空闲的。在一个实施例中,该通知是通过以下方式进行的:将所识别的处理器的自旋位置O…η设置为空闲(在框184处),以使得所识别的处理器检查其自旋位置O…η来拿取锁14并且访问非并行代码30。当判断为自旋位置表示空闲时,请求处理器可以进行图4中的操作。
[0031]通过为能够访问共享资源的每个处理器维持槽和自旋位置,所描述的实施例提供了管理对共享资源(诸如不能被同时访问的存储器中的共享代码和数据)的锁的技术。以此方式,如果锁14不是空闲的,那么由发请求的处理器访问的槽被设置为表示请求处理器的标识符。在所描述的某些实施例中,因为分离的自旋位置被用于处理器来确定何时允许得到锁/访问共享资源,所以用于锁的多个槽可以被实施在一个缓存线中。
[0032]所描述的操作可以被实施为使用标准编程和/或工程技术来生产软件、固件、硬件或其任何组合的方法、设备或计算机程序产品。因此,实施例的方面可以具有完全硬件实施例、完全软件实施例(包括固件、常驻软件和微代码等)或者结合软件和硬件方面的实施例的形式,它们都可以在这里被统称为“电路”、“模块”或“系统”。此外,实施例的方面可以具有承载在在其上承载`了计算机可读程序代码的一种或多种计算机可读介质中的计算机程序产品的形式。
[0033]可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)可以包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0034]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0035]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0036]可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0037]下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0038]也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品。
[0039]计算机程序指令也可以被装载到计算机、其他可编程数据处理设备或其他装置,以使得一系列操作步骤在计算机、其他可编程数据处理设备或其他装置上执行,以产生由计算机实施的处理,使得在计算机或其他可编程设备上执行的指令提供实施在流程图和/或框图的一个或多个框中规定的功能/动作的处理。
[0040]除非特别另外规定,术语“一实施例”、“实施例”、“多个实施例”、“该实施例”、“该多个实施例”、“一个或多个实施例”、“一些实施例”以及“一个实施例”表示“一个或多个本发明的一个或多个(但非全部)实施例”。
[0041]除非特别另外规定,术语“包括”、“包含”、“具有”及其各种变化形式表示“包括但不局限于”。
[0042]除非特别另外规定,穷举列出的项目不暗示任何或全部项目是相互排斥的。
[0043]除非特别另外规定,未限定数目的冠词表示“一个或多个”。
[0044]除非特别另外规定,彼此通信的装置不需要彼此持续通信。此外,彼此通信的装置可以通过一个或多个媒介直接或间接地通信。
[0045]关于具有彼此通信的多个组件的实施例的描述并不暗示着全部这种组件都是必须的。相反,描述了各种可选组件,以表示出本发明的可能实施例的广泛变化。
[0046]此外,虽然处理步骤、方法步骤或算法等可能被次序顺序描述,但是这种处理、方法和算法可以被构造为以可选方式工作。换言之,可能描述的步骤的任何次序或顺序不一定表示步骤由该顺序执行的要求。这里所描述的步骤可能以任何其他次序实践方式来进行。此外,一些步骤可以同时进行。
[0047]当在这里描述了单个装置或物体时,很容易明白一个以上的装置/物体(无论它们是否协同工作)可以被用来代替单个装置/物体。类似地,当在这里描述一个以上的装置或物体时,很容易明白单个装置/物体可以被用来代替这一个以上的物体,或者不同数目的装置/物体可以被用来代替所示出数目的装置或程序。装置的功能和/或特征可以可选地由一个以上的、没有被明确地描述为具有这种功能/特征的其他装置承载。因此,本发明的其他实施例不需要包括该装置本身。
[0048]附图的图示操作示出了以特定顺序发生的特定事件。在可选实施例中,特定操作可以以不同顺序执行,或者被调整或移除。此外,步骤可以被增加到上述逻辑中并且仍然符合所描述的实施例。此外,这里描述的操作可以顺序地进行或者特性操作可以并行地处理。再此外,操作可以由单个处理单元执行或者由分布的处理单元执行。
[0049]已经为了示意性和描述性目的提供了本发明的各种实施例的以上描述。其并不旨在穷尽本发明或者将本发明限制在所公开的精确形式。鉴于以上教导,可以进行许多修改和变化。其意味着本发明的范围不局限于具体的描述,而是由所附的权利要求所限定。以上的说明、示例和数据提供了制造和使用本发明的组成的全部描述。因为可以在不超出本发明的精神和范围的情况下进行本发明的许多实施例,所以本发明的权利存在于所附的权利要求。
【权利要求】
1.一种系统,包括: 多个处理器; 存储器,其可以由所述多个处理器访问;以及 计算机可读存储介质,具有由至少一个处理器执行以进行操作的计算机程序代码,该操作包括: 在所述存储器中维持多个槽,以实施在共享资源上的锁,其中所述槽对应于连续编号的计数器值并且表示不空闲或空闲之一; 由发出请求的处理器获取计数器值以作为所获取的计数器值,所述发出请求的处理器是请求所述共享资源的锁的处理器之一; 判断与所获取的计数器值相对应的槽是否表示空闲; 响应于与所获取的计数器值相对应的槽表示不空闲的判断,将所述发出请求的处理器的处理器标识符插入到与所获取的计数器值相对应的槽中;以及 响应于与所获取的计数器值相对应的槽表示空闲的判断,由所述发出请求的处理器访问所述共享资源。
2.根据权利要求1所述的系统,其中全部槽表示不空闲,或者仅一个槽表示空闲。
3.根据权利要求1所述的系统,其中所述操作还包括: 将所述存储器中用于所述发出请求的处理器的自旋位置设置为忙; 在所述发出请求的处理器的自旋位置表示忙的期间,所述发出请求的处理器不间断地检查所述自旋位置;以及 响应于所述发出请求的处理器的自旋位置表示空闲的判断,所述发出请求的处理器访问所述共享资源。
4.根据权利要求3所述的系统,其中所述操作还包括: 响应于所述槽表示空闲的判断,将与所获取的计数器值相对应的槽设置为忙值;以及响应于所述发出请求的处理器的自旋位置表示空闲的判断,将与所获取的计数器值相对应的槽设置为忙值,其中,如果所述槽表示忙值或者所述处理器标识符之一,则所述槽表示所述共享资源是不空闲的。
5.根据权利要求3所述的系统,其中,所述处理器各个都存在一个独立的自旋位置,并且其中有相同数目的槽、自旋位置和处理器。
6.根据权利要求3所述的系统,其中,每个自旋位置都包括一个缓存线,并且其中多个槽缓存线被用来实施所述槽,使得在每个槽缓存线中实施多个槽。
7.根据权利要求1所述的系统,其中,所述操作还包括: 由准备好释放所述共享资源的保持处理器确定释放所述共享资源,所述保持处理器是所述多个处理器之一; 由所述保持处理器确定,在所述保持处理器在请求锁时处理的所述槽的所述计数器值之后按顺序的下一个计数器值; 由所述保持处理器判断,下一个槽是否具有忙值,所述下一个槽是与所述下一个计数器值相对应的槽; 响应于所述下一个槽不具有忙值的判断,确定在所述下一个槽中表示的下一个处理器标识符;以及将锁空闲通知给下一个处理器,所述下一个处理器是由所述下一个处理器标识符识别的处理器之一。
8.一种管理对可由多个处理器访问的共享资源的锁的方法,包括: 在存储器中维持多个槽,以实施在所述共享资源上的锁,其中所述槽对应于连续编号的计数器值并且表示不空闲或空闲之一; 由发请求的处理器获取计数器值以作为所获取的计数器值,所述发请求的处理器是请求所述共享资源的锁的处理器之一; 判断与所获取的计数器值相对应的槽是否表示空闲; 响应于与所获取的计数器值相对应的槽表示不空闲的判断,将所述发请求的处理器的处理器标识符插入到与所获取的计数器值相对应的槽中;以及 响应于与所获取的计数器值相对应的槽表示空闲的判断,由所述发请求的处理器访问所述共享资源。
9.根据权利要求8所述的方法,其中全部槽表示不空闲,或者仅一个槽表示空闲。
10.根据权利要求8所述的方法,还包括: 将所述存储器中用于所述发请求的处理器的自旋位置设置为忙; 在所述发请求的处理器的自旋位置表示忙的期间,由所述发请求的处理器不间断地检查所述自旋位置;以及 响应于所述发请求的处理器的自旋位置表示空闲的判断,由所述发请求的处理器访问所述共享资源。
11.根据权利要求10所述的方法,还包括: 响应于所述槽表示空闲的判断,将与所获取的计数器值相对应的槽设置为忙值;以及响应于所述发请求的处理器的自旋位置表示空闲的判断,将与所获取的计数器值相对应的槽设置为忙值,其中如果所述槽表示忙值或者处理器标识符之一,则所述槽表示所述共享资源是不空闲的。
12.根据权利要求10所述的方法,其中所述处理器各个都存在一个独立的自旋位置,并且其中有相同数目的槽、自旋位置和处理器。
13.根据权利要求10所述的方法,其中每个自旋位置都包括一个缓存线,并且其中多个槽缓存线被用来实施所述槽,使得在每个槽缓存线中实施多个槽。
14.根据权利要求8所述的方法,还包括: 由准备好释放所述共享资源的保持处理器确定释放所述共享资源; 由所述保持处理器确定,在所述保持处理器在请求锁时处理的所述槽的所述计数器值之后按顺序的下一个计数器值; 由所述保持处理器判断下一个槽是否具有忙值,所述槽是与所述下一个计数器值相对应的槽; 响应于所述下一个槽不具有忙值的判断,确定在所述下一个槽中表示的下一个处理器标识符;以及 将锁空闲通知给下一个处理器,所述下一个处理器是由所述下一个处理器标识符识别的处理器之一。
【文档编号】G06F9/46GK103729238SQ201310475575
【公开日】2014年4月16日 申请日期:2013年10月12日 优先权日:2012年10月12日
【发明者】T·N·拿亚恩 申请人:国际商业机器公司