CN103778003B - 用于资源的分层锁定的方法和系统 - Google Patents

用于资源的分层锁定的方法和系统 Download PDF

Info

Publication number
CN103778003B
CN103778003B CN201310491869.6A CN201310491869A CN103778003B CN 103778003 B CN103778003 B CN 103778003B CN 201310491869 A CN201310491869 A CN 201310491869A CN 103778003 B CN103778003 B CN 103778003B
Authority
CN
China
Prior art keywords
thread
lock
node
list
person
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310491869.6A
Other languages
English (en)
Other versions
CN103778003A (zh
Inventor
S.Z.雅各布斯
D.A.拉森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103778003A publication Critical patent/CN103778003A/zh
Application granted granted Critical
Publication of CN103778003B publication Critical patent/CN103778003B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

在一个实施例中,从线程接收指定资源的锁定命令。如果节点锁中的层状态指示节点锁当前被拥有,则将该线程的标识符加入节点等待者列表中,以及如果该线程的锁定等待指示符指示该线程拥有节点锁,则在等待到节点锁中的下一层等待指示符指示任何线程对资源拥有全局锁之后,给该线程返回该锁定命令的成功完成状态。如果层状态指示没有线程持有节点锁,则将层状态改变成指示拥有节点锁,以及如果全局等待者和持有者列表是空的,则将该线程在上面执行的节点的标识符加入全局等待者和持有者列表中。

Description

用于资源的分层锁定的方法和系统
技术领域
本发明的实施例一般涉及计算机系统,尤其涉及为访问共享资源提供分层锁定协议的计算机系统。
背景技术
计算机系统通常包含像半导体、晶体管、芯片、和电路板那样的硬件和计算机程序的组合。随着在单个芯片上可以集成数量越来越多的更小和更快的晶体管,新处理器被设计成有效地使用这些晶体管来提高性能。当前,许多计算机设计人员选择越来越多的晶体管预算来构建愈来愈大和更复杂的单处理器。可替代地,可以将多个较小处理器内核放置在单个芯片上,因为单个简单处理器内核设计和验证起来较不复杂,所以这样做是有益的。这导致了较不昂贵和复杂的验证过程,因为在芯片上多次重复一次性验证模块,处理器。像多线程那样的技术利用了多个处理器和访问共享资源。共享资源的例子是处理器、存储器、存储器中的数据、协处理器、网络带宽、或二级存储。
发明内容
本发明提供了一种方法、计算机可读存储介质和计算机。在一个实施例中,从第一线程接收指定资源的锁定命令。如果节点锁中的层状态指示对全局数据节点锁当前被拥有(own),则将第一线程的标识符加入节点锁中的节点等待者列表中,以及如果第一线程的锁定等待指示符指示第一线程对全局数据拥有节点锁,则在等待直到节点锁中的下一层等待指示符指示任一线程对资源拥有全局锁之后,将对于该锁定命令的成功完成状态返回到第一线程。如果层状态指示没有线程对全局数据拥有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局数据中的全局等待者和持有者列表是空的,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程。如果层状态指示没有线程对全局数据持有(hold)节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局数据中的全局待定等待者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程。如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符未在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程。
附图说明
图1描绘了实现本发明实施例的示范性系统的高级框图;
图2描绘了按照本发明实施例的分层锁的示范性数据结构的框图;
图3描绘了按照本发明实施例的锁定和试锁的示范性处理的流程图;
图4描绘了按照本发明实施例的锁定的进一步示范性处理的流程图;
图5描绘了按照本发明实施例的锁定的进一步示范性处理的流程图;
图6描绘了按照本发明实施例的锁定的进一步示范性处理的流程图;
图7描绘了按照本发明实施例的解锁的示范性处理的流程图;
图8描绘了按照本发明实施例的解锁的进一步示范性处理的流程图;
图9描绘了按照本发明实施例的解锁的进一步示范性处理的流程图;
图10描绘了按照本发明实施例的解锁的进一步示范性处理的流程图;以及
图11描绘了按照本发明实施例的解锁的进一步示范性处理的流程图。
但是,要注意的是,附图只例示了本发明的示范性实施例,因此不要被认为是限制本发明的其他实施例的范围。
具体实施方式
随着多处理器计算系统已经进步,系统中的计算内核和芯片的数量已经显著增加,使得系统中的每个计算内核不能接收和窥探大系统中的SMP(对称多处理)结构上的每笔交易。这样会使SMP结构成为系统中的瓶颈,并且极大地限制了大规模SMP系统提供的性能和整合优势。现代SMP结构在可能的情况下通过缩小和限制它们在该结构上的命令的范围实现它们的伸缩能力。假设在SMP上执行的固件和软件是高亲和化的,这导致与传统平坦SMP结构类似地执行的SMP结构。
这些大规模SMP结构的特性之一是随着一条数据的并行消费者的数量上升,生产者有效修改该数据的能力下降。在生产者可以变成该数据的最高相干点和成功修改它之前,可能有必要作许多次尝试,有时即使没有数万次循环也要花上数千次。一条数据的并行消费者的数量对于全局访问存储区尤其高。这对于像全局锁(global lock)那样的经常访问数据尤其如此。当前锁持有者释放锁的能力随着对锁的争夺增加而受到极大影响。这使获取锁的整体等待时间增加,并常常会导致性能问题。
在本发明的实施例中,锁定算法使用如下数据:每个线程具有它自己的局部等待指示符,其在等待获取锁的第一层时使用。与整个锁的第一层相关联的每个数据块包含如下多条数据(这个层在下文中被称为节点锁,这个数据在本文中被称为节点数据):层状态、等待者列表(线程的列表)和下一层等待指示符。在实施例中,对于系统中的每个节点(亲和域)存在节点数据的实例。
与整个锁的第二层相关联的每个数据块包含如下多条数据(这个层在下文中被称为全局锁,这个数据在本文中被称为全局数据):等待者和持有者列表(节点的列表)、和待定等待者列表(节点的列表)。在实施例中,第二层是整个分层锁中的最高层,因此只存在全局数据的一个实例。这个数据只由来自每个节点的节点锁持有者访问。锁的使用包含描述在图中的锁定、试锁和解锁算法。
参照相同标号在几个视图中自始至终表示相同部分的附图,图1描绘了按照实施例本发明实施例的节点计算机系统100的高级框图表示。本发明实施例的机制和装置同样适用于任何适当计算系统。
节点计算机系统100的主要部件包含一个或多个处理器101、存储器102、终端接口单元111、存储接口单元112、I/O(输入/输出)设备接口单元113、和网络接口单元114,所有这些都经由存储器总线103、I/O总线104、和I/O总线接口单元105,为部件间通信直接或间接地可通信耦合着。
节目计算机系统100包含本文统称为处理器101的一个或多个通用可编程中央处理单元(CPU)101A,101B,101C和101D。在实施例中,节点计算机系统100包含代表相对较大系统的多个处理器;但是,在另一实施例中,节点计算机系统100可替代地可以是单个CPU系统。每个处理器101执行存储在存储器102中的指令和可以包含一级或多级板上高速缓存。
在实施例中,存储器102可以包含随机访问半导体存储器、存储设备、或存储或编码数据和程序的存储介质(易失性或非易失性)。在另一实施例中,存储器102代表节点计算机系统100的整个虚拟存储器,也可以包括与节点计算机系统100耦合或经由网络130连接的其他计算机系统的虚拟存储器。存储器102在概念上是单个整体实体,但在其他实施例中,存储器102是像高速缓存和其它存储设备的层状结构那样的更复杂安排。例如,存储器可能以多级高速缓存的形式存在,这些高速缓存还可以按功能划分,以便一个高速缓存保存指令,而另一个高速缓存保存供一个或几个处理器使用的非指令数据。如在各种所谓非均匀存储器访问(NUMA)计算机体系架构的任何一种中所知,存储器还可以是分布式的,并与不同CPU或CPU组相关联。
存储器102被例示成包含由管理程序136管理的多个线程134。尽管线程134和管理程序136被例示成包含在节点计算机系统100中的存储器102内,但在其他实施例中,它们的一些或所有可以在不同计算机系统上和可以,例如,经由网络接口单元114远程访问。进一步,节点计算机系统100可以使用使节点计算机系统100的程序表现得好像它们只访问单个大型存储实体而不是访问多个较小存储实体似的虚拟寻址机制。因此,虽然线程134和管理程序136被例示成驻留在存储器102中,但这些元件未必同时都完全包含同一存储设备中。
每个线程134都包含应用程序(app)144和锁定等待指示符146。可以支持任意数量的逻辑线程134,以及在任何时候驻留在计算机100中的逻辑线程134的数量可以随线程被加入计算机100中或从计算机100中移走动态地变化。每个线程134包含在分立或独立存储空间中的在处理器101上执行的指令。在各种实施例中,应用程序144是用户应用程序、第三方应用程序、或它们的任何部分、多种、或组合。应用程序144包含在处理器101上执行的指令或通过在处理器101上执行的指令解释的语句。每个应用程序144可以彼此相同或不同。
尽管管理程序136被例示成在存储器102内,但在其他实施例中,所有或部分管理程序136可以用固件或软件来实现。管理程序136可以执行像页表管理那样的低级功能,也可以执行像创建和删除线程134、同时I/O维护、和向/从各种线程134分配/释放处理器、存储器、和其他硬件或程序那样的较高级管理功能。管理程序136控制将共享资源分配给线程134和线程访问共享资源,以保证这些线程在节点计算机系统内的安全和隔离。
管理程序136静态地和/或动态地向每个线程134分配计算机100中可用资源的一部分。例如,可以分配给每个线程134要在上面执行的一个或多个处理器101和/或一个或多个硬件资源,以及要访问的可用存储空间的一部分。逻辑线程134共享特定程序和/或像处理器101那样的硬件资源,以便给定资源可以被不止一个线程134利用。在可替代实施例中,每次可以将程序和硬件资源只分配给一个线程134。因此,另外的资源,例如,海量存储、备份存储、用户输入、网络连接、和I/O适配器通常被分配给一个或多个逻辑线程134。资源可以以许多方式,例如,逐条总线地,或逐个资源地分配,多个逻辑线程134共享同一条总线上的资源。每次可以将一些资源分配给多个逻辑线程134。本文标识的资源只是例子,可以使用能够被分配的任何适当资源。
在实施例中,线程134和/或管理程序136包含在处理器101上执行的指令或通过在处理器101上执行的指令解释以执行如下面参考图2,3,4,5,6,7,8,9,10和11进一步所述的功能的语句。在另一实施例中,线程134和/或管理程序136可以用微代码或固件来实现。在另一实施例中,管理程序136可以经由逻辑门电路、半导体器件、芯片、电路、电路卡、和/或其他物理硬件设备用硬件来实现。
存储器102进一步包含分层锁(tiered lock)138-1,138-2和138-3、和数据140。在实施例中,线程134使用分层锁138-1,138-2和/或138-3锁定(独家访问)数据140或任何部分,或它们的组合。在另一实施例中,线程134使用分层锁138-1,138-2和/或138-3锁定(独家访问)像如下那样的资源:终端接口单元111、存储接口单元112、I/O设备接口单元113、网络接口单元114、用户I/O设备121、存储设备125、处理器101、任何其他硬件资源、或它们的任何部分、多种、或组合。每个分层锁138-1,138-2和138-3控制对不同资源的访问。
存储器总线103提供在处理器101、存储器102、和I/O总线接口单元105之间传送数据的数据通信路径或通信结构。在实施例中,可以经由相同存储器总线103或通信结构连接多个节点计算机系统100。I/O总线接口单元105还与系统I/O总线104耦合以便将数据传送给各种I/O单元和从各种I/O单元传送数据。I/O总线接口单元105通过系统I/O总线104与也称为I/O处理器(IOP)或I/O适配器(IOA)的多个I/O接口单元111,112,113和114通信。
I/O接口单元支持与多种存储和I/O设备的通信。例如,终端接口单元111支持一个或多个用户I/O设备的附加,该用户I/O设备包含用户输出设备(譬如视频显示设备、扬声器、和/或电视机)、和用户输入设备(譬如摄像机、键盘、鼠标、小键盘、触摸板,跟踪球、按钮、射频识别标签、光笔、手指、手写笔、或其他定位设备)。用户可以使用用户界面操纵用户输入设备,以便向用户I/O设备121和节点计算机系统100提供输入数据和命令,以及可以经由用户输出设备接收输出数据。例如,可以像显示在显示设备上那样,经由用户I/O设备121展示用户界面。用户I/O设备121可以是任何大小的,可以容纳多个用户同时或协作地观看和触摸显示设备,在实施例中,任何用户可以在显示设备上的任何地点上触摸。
存储接口单元112支持一个或多个或直接访问存储设备125(通常是旋转磁盘驱动器存储设备,但它们可替代地可以是其他存储设备,包括配置成对于主计算机来说表现得像单个大型存储设备似的盘驱动器的阵列)的附加。在另一实施例中,存储设备125可以经由任何类型的二次存储设备来实现。如果有需要,可以将存储器102,或其任何部分的内容存储到存储设备125中,以及从存储设备125中检索存储器102,或其任何部分的内容。I/O设备接口单元113提供与像打印机或传真机那样的其他输入/输出设备或其他类型的设备的任何一种的接口。网络接口单元114提供从节点计算机系统100到其他计算机系统和数字设备的一条或多条通信路径。
尽管存储器总线103在图1中被显示成提供处理器101、存储器102、和I/O总线接口105之间的直接通信路径的相对简单单个总结结构,但事实上,存储器总线103可以包含多条不同总线或通信路径,它们可以像层状、星状或网状配置中的点到点链路、多条层状总线、并行和冗余路径、或任何其他适当类型的配置那样,以各种形式的任何一种排列。更进一步,虽然I/O总线接口单元105和I/O总线104被显示成单个相应单元,但节点计算机系统100事实上可以包含多个I/O总线接口单元105和/或多条I/O总线104。虽然示出了将系统I/O总线104与通到各种I/O设备的各种通信路径分开的多个I/O接口单元,但在其他实施例中,一些或所有I/O设备直接与一条或多条系统I/O总线连接。
在各种实施例中,节点计算机系统100是多用户大型计算机系统、单用户系统、或服务器计算机或具有一点或没有直接用户界面,而是从其他计算机系统(客户机)接收请求的类似设备。在其他实施例中,节点计算机系统100被实现成台式计算机、便携式电脑、膝上型或笔记本电脑、平板电脑、袖珍电脑、电话、智能电话、寻呼机、汽车、电话会议系统、家用电器、或任何其他适当类型的电子设备。
网络130可以是任何适当总线、网络、或它们的任意多种或组合,可以支持适合向/从节点计算机系统100传送数据和/或代码的任何适当协议。在各种实施例中,网络130可以代表直接或间接与节点计算机系统100连接的存储设备或存储设备的组合。在另一实施例中,网络130可以支持无线通信。在另一实施例中,网络130可以支持像电话线或电缆那样的硬连线通信。在另一实施例中,网络130可以是互联网和可以支持IP(互联网协议)。在另一实施例中,网络130被实现成局域网(LAN)或广域网(WAN)。在另一实施例中,网络130被实现成热点服务提供商网络。在另一实施例中,网络130被实现成内联网。在另一实施例中,网络130被实现成任何适当蜂窝式数据网络、基于蜂窝的无线电网络技术、或无线网络。在另一实施例中,网络130被实现成任何适当总线、网络、或它们的任意多种或组合。
图1旨在描绘节点计算机系统100和网络130的代表性主要部件。但是,各个部件可以具有比图1中所表示大的复杂性,可以存在除了显示在图1中的那些之外的其他部件,以及可以改变这样部件的数量、类型、和配置。本文公开了这样额外复杂性或额外变化的几个特定例子;这些只是举例说明,而未必只有这样的变化。例示在图1中和实现本发明的各种实施例的各种程序部件可以以包括使用各种计算机应用程序、例程、部件、程序、对象、模块、数据结构等的许多方式实现,下文称为“计算机程序”,或简称为“程序”。
计算机程序包含在各种时间驻留在节点计算机系统100中的各种存储器和存储设备中,当被节点计算机系统100中的一个或多个处理器读取或执行时,或当通过一个或多个处理器执行的指令解释时,使节点计算机系统10可以执行实现包含本发明的实施例的各种方面的步骤或元件所需的动作一条或多条指令或语句。本发明的实施例的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的实施例的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括存储在存储设备中的固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的实施例还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘(例如存储器125)、随机存取存储器(RAM)(例如内存102)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,还包括常规的过程式程序设计语言。程序代码可以完全地在用户计算机上执行、、部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
定义本发明的各种实施例的功能的计算机程序可以经由多种有形计算机可读存储介质输送给计算机系统,该有形计算机可读存储介质可以可操作地或可通信地与一个或几个处理器通信(直接或间接)。也可以将计算机程序指令装载到计算机、其他可编程数据处理装置、或其他设备上,使一系列操作步骤可以在计算机、其他可编程装置、或其他设备上得到执行,形成计算机实现进程,以便在计算机或其他可编程装置上执行的指令提供实现在流程图和/或框图的一个或几个方框中规定的功能/动作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些实施例中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本发明的实施例也可以作为与客户端公司、非营利组织、政府机构、或内部组织结构的服务衔接部分来交付。这些实施例的一些方面可以包含配置要执行的计算机系统,以及部署实现本文所述的一些或所有方法的计算服务(例如,计算机可读代码、硬件、和万维网服务)。这些实施例的一些方面还可以包含分析客户公司,响应该分析提出建议,生成实现该建议的一些部分的计算机可读代码,将该计算机可读代码合并到现有进程、计算机系统、和计算基础设施中,计量本文所述的方法和系统的使用,将费用分摊给用户,以及对用户开出他们使用这些方法和系统的帐单。另外,下文所述的各种程序可以根据在本发明的特定实施例中实现它们的应用来识别。但是,使用如下的任何具体程序术语仅仅为了方便起见,因此本发明的实施例不局限于只用在这样的术语所标识和/或暗示的任何特定应用中。例示在图1中的示范性环境无意限制本发明。实际上,可以不偏离本发明的实施例的范围地使用其他替代性硬件和/或程序环境。
图2描绘了按照本发明实施例的分层锁138的示范性数据结构的框图。分层锁138统指分层锁138-1,138-2,和138-3(图1)。分层锁138包含指定给线程134的线程A和B的第一层(节点锁)205、指定给线程134的线程C,D和E的第一层(节点锁)210、和第二层(全局锁)215。第一层(节点锁)205包含层状态220、等待者列表240、和下一层等待指示符230,所有这些在本文中被称为节点数据。第一层(节点锁)210包含层状态235、等待者列表240、和下一层等待指示符245,所有这些在本文中被称为节点数据。第二层215包括等待者和持有者列表250和待定等待者列表255,所有这些在本文中被称为全局数据。层状态220包含任何线程(指定给第一层节点锁205、作为线程134的例子的线程A和B的某一个)持有还是未持有第一层节点锁205上的锁的指示。在各种实施例中,层状态220可以包含真或假、是或否、打开或关闭、或一或零的指示。
等待者列表225包含标识等待获取第一层节点锁205上的锁和当前未持有第一层节点锁205上的锁的线程(指定给第一层节点锁205的线程A和B的子集)的线程标识符的列表。下一层等待指示符230包含指示持有第一层节点锁205的线程是否持有或拥有第二层全局锁215上的全局锁的指示。
层状态235包含任何线程(指定给第一层节点锁210、作为线程134的例子的线程C,D和E的某一个)持有还是未持有第一层节点锁210上的锁的指示。在各种实施例中,层状态235可以指定真或假、是或否、打开或关闭、或一或零的指示。等待者列表240包含标识等待获取第一层节点锁210上的锁和当前未持有第一层节点锁210上的锁的线程(指定给第一层节点锁210的线程C,D和E的子集)的线程标识符的列表。下一层等待指示符245包含指示任何线程(指定给第一层节点锁210的线程C,D和E的某一个)是否具有第二层全局锁215上的全局锁的指示。持有第一层(节点锁)205或210上的锁意味着允许持有节点锁的线程134访问(读取和/或写入)全局数据。不允许未持有节点锁的线程访问全局数据。持有第二层(全局锁)215上的锁意味着允许持有全局锁的线程134访问(读取和/或写入)全局锁所代表的资源。不允许未持有全局锁的线程访问该资源。
等待者和持有者列表250包含节点100的一个或多个标识符的列表,节点100包含等待获取第二层全局锁215上的锁或实际持有第二层全局锁215上的锁的一个或多个线程134。在实施例中,只有一个线程实际持有第二层全局锁215上的锁,因此该锁是独家的。待定等待者列表255包含节点100的一个或多个标识符的列表,节点100包含等待获取第二层全局锁215上的锁、未出现在等待者和持有者列表250中、和待定(等待)加入等待者和持有者列表250中的一个或多个线程134。独家允许持有或拥有第二层(全局锁)215上的锁的线程访问(读取和/或写入)分层锁138代表的资源。
图3描绘了按照实施例本发明实施例的锁定和试锁的示范性处理的流程图。从方框300开始控制。然后使控制继续到方框305,在方框305中发出线程134发出识别发出线程134希望锁定的资源的锁定或试锁尝试命令。对于锁定命令,发出线程134暂停执行,并等待到发出线程134获得对资源的锁之后继续执行。对于试锁尝试命令,发出线程134不等待获取锁,而是如果发出线程134未获得对资源的锁,则可能在替代性控制流路径上继续执行。然后使控制继续到方框310,在方框310中,响应该锁定或试锁尝试命令,发出线程134定位指定给资源的分层锁138-1,138-2或138-3、和指定给发出线程134正在上面执行和指定给发出线程134的节点的分层锁138-1,138-2或138-3中的节点数据。
然后使控制继续到方框315,在方框315中发出线程134确定所定位分层锁的层状态220或235是否指示节点锁当前被任何线程持有。如果方框315中的确定为真,则节点锁当前被任何线程持有,因此使控制继续到方框320,在方框320中发出线程134确定发出线程134发出的命令是否是试锁尝试命令。如果方框320中的确定为真,则发出线程134发出的命令是试锁尝试命令,因此使控制继续到方框399,在方框399中发出线程134返回状态,指示试锁尝试命令失败,因为发出线程134由于层状态220或235指示节点锁当前被持有而不能马上获取对所请求资源的全局锁,以及试锁尝试命令的意思是发出线程134不想等待锁。
如果方框320中的确定为假,则发出线程134发出的命令是锁定命令,这意味着发出线程134愿意等待对资源的锁,因此使控制继续到方框325,在方框325中发出线程134通过尝试将发出线程134的标识符加入节点等待者列表225或240中,尝试原子地(atomically)改变节点等待者列表225或240。然后使控制继续到方框330,在方框330中发出线程134确定原子改变节点等待者列表225或240是否成功了。如果方框330中的确定为真,则由于没有其他线程与发出线程134同时尝试改变节点等待者列表225或240,以及将发出线程的标识符加入节点等待者列表225或240中,指示该发出线程正在等待获取节点锁,所以原子改变节点等待者列表225或240成功了,因此使控制继续到如下进一步所述的图4的方框405。
如果方框330中的确定为假,则由于另一个线程与发出线程134同时尝试改变节点等待者列表225或240(多个线程可能同时尝试修改同一节点锁,但只允许一个线程这样做),所以原子改变节点等待者列表225或240未成功,因此使控制返回到如上所述的方框315。因此,对于锁定命令,发出线程134尝试将发出线程134的标识符加入节点等待者列表225或240中直到尝试加入(在方框325中)取得成功(在方框330中)(没有其他线程同时尝试访问节点等待者列表225或240),或直到层状态220或235(在方框315中)指示节点锁当前未被持有。
如果方框315中的确定为假,则层状态220或235指示节点锁当前未被任何线程持有,因此使控制继续到方框335,在方框335中发出线程134尝试原子地改变层状态220或235以指示节点锁被持有。然后使控制继续到方框340,在方框340中发出线程134确定原子改变层状态220或235是否成功了。如果方框340中的确定为真,则由于没有其他线程与发出线程134同时尝试改变节点锁,所以原子改变层状态220或235以指示节点锁被持有成功了,因此使控制继续到如下面进一步描述的图5的方框505。如果方框340中的确定为假,则由于另一个线程与发出线程134同时尝试改变层状态220或235(多个线程可能同时尝试修改同一节点锁,但只允许一个线程这样做),所以原子改变层状态220或235未成功,因此使控制返回到如上所述的方框315。因此,对于锁定命令或试锁尝试命令,只要层状态220或235指示节点锁当前未被持有(方框315的假分支),发出线程134就尝试改变节点层状态220或235以指示节点锁被持有直到尝试的改变取向成功(方框340的真分支)(同时没有其他线程尝试访问层状态220或235)。
图4描绘了按照实施例本发明实施例的锁定的进一步示范性处理的流程图。控制流在方框405上从方框330(图3)的真分支进入图4的逻辑图。在方框405中,发出线程134确定线程锁定等待指示符146是否指示发出线程134持有节点锁。如果方框405中的确定为真,则线程锁定等待指示符146指示发出线程134持有节点锁,因此使控制继续到方框410,在方框410中发出线程134使发出线程134的线程锁定等待指示符146复位,用于下一次发出线程134变成等待者时指示发出线程134未持有节点锁。然后使控制继续到方框415,在方框415中发出线程134确定下一层等待指示符230或245是否指示任何线程持有或拥有全局锁215。如果方框415中的确定为真,则下一层等待指示符230或245指示任何线程持有或拥有全局锁215,因此使控制继续到方框420,在方框420中发出线程134使下一层等待指示符230或245复位,供下一个节点等待者用于指示符用于指示全局锁215上的全局锁没有被任何线程持有或拥有。然后使控制继续到图5的方框599,在方框599中发出线程134返回到成功锁定或试锁尝试完成状态,指示发出线程134现在持有或拥有对全局锁215代表的所请求资源的独家锁,因此该发出线程可以独家访问所请求资源。如果方框415中的确定为假,则下一层等待指示符230或245指示全局锁215上的全局锁未被任何线程持有或拥有,因此使控制返回到方框415,在方框415中发出线程134再次如上所述确定下一层等待指示符230或245是否指示任何线程具有全局锁215上的全局锁。
如果方框405中的确定为假,则线程锁定等待指示符146指示发出线程134未持有或拥有节点锁,因此使控制继续到方框425,在方框425中发出线程134确定发出线程134的线程锁定等待指示符146是否指示发出线程134持有或拥有从发出试锁尝试命令的另一个线程接收的节点锁。如果方框425中的确定为真,则发出线程134的线程锁定等待指示符146指示发出线程134持有或拥有从发出试锁尝试命令的另一个线程接收的节点锁,因此使控制继续到方框430,在方框430中发出线程134使发出线程134的线程锁定等待指示符146复位,用于下一次发出线程134变成等待者时指示发出线程134未持有节点锁。然后使控制继续到如下进一步所述的图5的方框505。
如果方框425中的确定为假,则发出线程134的线程锁定等待指示符146指示发出线程134未持有或拥有从发出试锁尝试命令的另一个线程接收的节点锁,因此使控制继续到方框435,在方框435中发出线程134确定发出线程134的线程锁定等待指示符146是否指示发出线程134持有或拥有节点锁和全局锁两者。如果方框435中的确定为真,则发出线程134的线程锁定等待指示符146指示发出线程134持有或拥有节点锁和全局锁两者,因此使控制继续到方框440,在方框440中发出线程134使线程锁定等待指示符146复位,用于下一次发出线程134变成等待者时指示发出线程134未具有,持有或拥有节点锁。然后使控制继续到图5的方框599,在方框599中发出线程134返回到成功锁定或试锁尝试完成状态,指示发出线程134现在持有或拥有对全局锁215代表的所请求资源的独家锁。如果方框435中的确定为假,则发出线程134的线程锁定等待指示符146未指示发出线程134具有,持有或拥有节点和全局锁,因此使控制返回到如上所述的方框405。
图5描绘了按照实施例本发明实施例的锁定的进一步示范性处理的流程图。控制流在方框505上从图3的方框340或图4的方框430进入图5的逻辑图。在方框505中,发出线程134在指定给发出线程134的分层锁中定位或寻找全局数据。然后使控制继续到方框510,在方框510中发出线程134确定全局等待者和持有者列表250是否是空的。如果方框510中的确定为真,则全局等待者和持有者列表250是空的,在任何节点上没有线程持有对所请求资源的全局锁,以及在任何节点上没有线程正在等待对所请求资源的全局锁,因此使控制继续到方框515,在方框515中发出线程134尝试原子地将发出线程134在上面执行的节点的标识符加入全局等待者和持有者列表250中,以便将该节点标识为对所请求资源的全局锁的持有者。然后使控制继续到方框520,在方框520中发出线程134确定原子改变是否成功了。如果方框520中的确定为真,则原子改变全局等待者和持有者列表250成功了,没有其他线程与发出线程134同时访问全局等待者和持有者列表250,因此使控制继续到方框599,在方框599中发出线程134返回到成功锁定或试锁尝试完成状态,指示发出线程134现在持有或拥有对所请求资源的独家全局锁。如果方框520中的确定为假,则由于另一个线程与发出线程134尝试的原子改变同时访问全局等待者和持有者列表250,所以原子改变全局等待者和持有者列表250未成功,因此使控制返回到如上所述的方块510。这样,只要全局等待者和持有者列表250是空的(方框510的真分支)和原子改变未成功(方框520的假分支),发出线程134就继续尝试原子地将发出线程134在上面执行的节点的标识符加入全局等待者和持有者列表250中(方框515)
如果方框510中的确定为假,则全局等待者和持有者列表250不是空的,因此使控制继续到方框525,在方框525中发出线程134确定发出线程134发出的命令是否是试锁尝试命令。如果方框525中的确定为真,则发出线程134发出的命令是试锁尝试命令,因此使控制继续到如下进一步所述的图6的方框605。如果方框525中的确定为假,则发出线程134发出的命令是锁定命令,因此使控制继续到方框530,在方框530中发出线程134确定发出线程134在上面执行的节点的标识符是否已经存储在全局等待者和持有者列表250中。如果方框530中的确定为真,则发出线程134在上面执行的节点的标识符已经存储在全局等待者和持有者列表250中,因此使控制继续到方框535,在方框535中发出线程134尝试原子地将发出线程134在上面执行的节点的标识符加入全局待定等待者列表255中。然后使控制继续到方框545,在方框545中发出线程134确定全局待定等待者列表255的尝试改变是否成功了。如果方框545中的确定为真,则由于没有其他线程与发出线程134同时尝试访问全局待定等待者列表255,所以发出线程134成功地原子地将发出线程134在上面执行的节点的标识符加入全局待定等待者列表255中,因此使控制继续到如上所述的图4的方框415。
如果方框545中的确定为假,则由于另一个线程与发出线程134同时尝试访问全局待定等待者列表255,所以发出线程134未成功地原子地将发出线程134在上面执行的节点的标识符加入全局待定等待者列表255中,因此使控制返回到如上所述的方框510。如果方框530中的确定为假,则发出线程134在上面执行的节点的标识符还未存储在全局等待者和持有者列表250中,因此使控制继续到方框540,在方框540中发出线程134尝试原子地将发出线程134在上面执行的节点的标识符加入全局等待者和持有者列表250中。然后使控制继续到方框545,在方框545中发出线程134确定将发出线程134在上面执行的节点的标识符尝试加入全局待定等待者列表255中是否成功了。如果方框545中的确定为真,则将发出线程134在上面执行的节点的标识符加入全局待定等待者列表255中成功了,因此使控制继续到如上所述的图4的方框415。如果方框545中的确定为假,则由于另一个线程与发出线程134同时尝试访问全局待定等待者列表255,所以将发出线程134在上面执行的节点的标识符加入全局待定等待者列表255中未成功,因此使控制返回到如上所述的方框510。
图6描绘了按照实施例本发明实施例的锁定的进一步示范性处理的流程图。如上面参考图5所述,控制流从方框525的真分支进入图6的逻辑图。再次参照图6,从方框605开始控制,在方框605中发出线程134确定节点等待者列表225或240是否是空的。如果方框605中的确定为真,则节点等待者列表225或240是空的,没有线程在等待锁定所请求资源的分层锁上的节点锁,因此使控制继续到方框610,在方框610中发出线程134尝试原子地改变层状态220或235以指示节点锁未被任何线程持有。然后使控制继续到方框615,在方框615中发出线程134确定层状态220或235的原子改变尝试是否成功了。如果方框615中的确定为真,则由于没有其他线程与发出线程134同时尝试访问层状态220或235,所以层状态220或235的原子改变尝试成功了,因此使控制继续到方框699,在方框699中发出线程134返回到试锁尝试失败完成状态,指示试锁尝试命令失败了和未获得锁,因此不允许发出试锁尝试命令的线程访问指定资源。如果方框615中的确定为假,则由于另一个线程与发出线程134同时访问层状态220或235,所以原子改变尝试未成功,因此使控制返回到如上所述的方框605。
如果方框605中的确定为假,则节点等待者列表225或240不是空的,至少一个线程在等待代表所请求资源的分层锁上的节点锁,因此使控制继续到方框620,在方框620中发出线程134确定给予节点锁的下一个有序节点线程。节点线程是与发出线程134相同的节点执行的线程。发出线程134创建每个节点上的线程的有序列表,以防止线程的锁匮乏(以防止没有线程曾经接收到锁的状况)。线程排序可以遵从任何定义的排序方案,定义的排序方案必须供根据线程排序作出判定的所有线程使用。然后使控制继续到方框625,在方框625中发出线程134尝试原子地从节点等待者列表225或240中除去所确定的下一个有序节点线程。然后使控制继续到方框630,在方框630中发出线程134确定尝试从等待者列表225或240中除去所确定下一个有序节点线程的标识符是否成功了。如果方框630中的确定为真,则由于没有其他线程与发出线程134同时访问等待者列表225或240,所以尝试从等待者列表225或240中除去所确定下一个有序节点线程的标识符成功了,因此使控制继续到方框635,在方框635中发出线程134设置所确定下一个有序节点线程的锁定等待指示符146,以指示所确定下一个有序节点线程已经获得了所请求资源的节点锁,以及所确定下一个有序节点线程从发出试锁尝试命令的发出线程134获得了节点锁。然后使控制继续到方框699,在方框699中发出线程134返回到试锁尝试失败完成状态,指示试锁尝试命令失败了和未获得锁。如果方框630中的确定为假,则由于另一个线程与发出线程134同时访问等待者列表225或240,所以尝试原子改变等待者列表225或240未成功,因此使控制返回到如上所述的方框605。
图7描绘了按照实施例本发明实施例的使用分层锁解锁资源的示范性处理的流程图。从方框700开始控制。然后使控制继续到方框705,在方框705中发出线程134发出识别发出线程134拥有或持有锁和该发出线程希望解锁的资源的解锁命令。然后使控制继续到方框710,在方框710中,响应解锁命令的发出,发出线程134为发出线程134在上面执行和指定给发出线程和发出线程请求解锁的资源的节点在分层锁138中定位节点数据。然后使控制继续到方框715,在方框715中发出线程134确定在找到的节点数据中节点等待者列表225或240是否是空的。如果方框715中的确定为真,则节点等待者列表225或240是空的,没有线程正在等待获取对所请求资源的节点数据的锁,因此使控制继续到方框720,在方框720中发出线程134尝试原子改变层状态220或235以指示节点锁未被任何线程持有。然后使控制继续到方框725,在方框725中发出线程134确定层状态220或235的尝试原子改变是否成功了。如果方框725中的确定为真,则由于没有其他线程与发出线程134同时尝试改变层状态220或235,所以尝试原子改变层状态220或235以指示节点锁未被任何线程持有成功了,因此使控制继续到如下进一步所述的图10的方框1005。如果方框725中的确定为假,则由于另一个线程与发出线程134同时访问层状态220或235,所以尝试原子改变层状态220或235以指示节点锁未被任何线程持有未成功,因此使控制返回到如上所述的方框715。
如果方框715中的确定为假,则节点等待者列表225或240不是空的,至少一个线程正在等待获取所请求资源的分层锁上的节点锁,因此使控制继续到方框730,在方框730中发出线程134确定移交节点锁的下一个有序节点线程。然后使控制继续到方框735,在方框735中发出线程134尝试原子地从节点等待者列表225或240中除去所确定的下一个有序节点线程。然后使控制继续到方框740,在方框740中发出线程134确定尝试从等待者列表225或240中除去所确定下一个有序节点线程是否成功了。如果方框740中的确定为真,则由于没有其他线程与发出线程134同时尝试访问节点等待者列表225或240,所以尝试从节点等待者列表225或240中除去所确定下一个有序节点线程成功了,因此使控制继续到如下进一步所述的图8的方框805。如果方框740中的确定为假,则由于另一个线程与发出线程134尝试改变节点等待者列表225或240同时访问节点等待者列表225或240,所以该原子改变未成功,因此使控制返回到如上所述的方框715。
图8描绘了按照实施例本发明实施例的解锁的进一步示范性处理的流程图。控制流在方框805上从如上所述的图7的方框740进入。再次参照图8,在方框805中,发出线程134确定所确定下一个有序节点线程在线程顺序中在发出线程134之前还是之后。如果所确定下一个有序节点线程在线程顺序中在发出线程134之后,则使控制继续到方框810,在方框810中发出线程134设置所确定下一个有序节点线程的锁定等待指示符146以指示所确定下一个有序节点线程拥有节点锁和全局锁两者。然后使控制继续到方框899,在方框899中发出线程134返回到成功解锁操作完成状态,不再允许发出线程访问解锁的资源。如果所确定下一个有序节点线程在线程顺序中在发出线程134之前,则使控制从方框805继续到方框815,在方框815中发出线程134设置所确定下一个有序节点线程的锁定等待指示符146以指示所确定下一个有序节点线程拥有节点锁。然后使控制继续到方框820,在方框820中发出线程130在与节点锁相同的分层锁中定位全局数据。然后使控制继续到方框825,在方框825中发出线程134创建所定位全局数据的本地副本。如下进一步所述,发出线程134使用本地副本直到发出线程134对全局数据进行本地副本的原子更新。然后使控制继续到如下进一步所述的图9的方框905。
图9描绘了按照实施例本发明实施例的解锁的进一步示范性处理的流程图。控制流在方框805上从图8的方框825进入图9的逻辑图。在方框905中,发出线程134确定全局待定等待者列表255是否是空的。如果方框905中的确定为真,则全局待定等待者列表255是空的,因此使控制继续到方框910,在方框910中发出线程134确定在等待者和持有者列表250中是否识别出除了发出线程134在上面执行的节点之外的其他节点。如果方框910中的确定为真,则在等待者和持有者列表250中识别出除了发出线程134在上面执行的节点之外的至少一个其他节点,因此使控制继续到方框915,在方框915中发出线程134确定节点的有序列表中移交全局锁的下一个有序节点。然后使控制继续到方框920,在方框920中发出线程134尝试用全局数据的本地副本原子地更新全局等待者和持有者列表250和待定等待者列表255。也就是说,发出线程134尝试将全局数据的本地副本复制到全局数据。然后使控制继续到方框925,在方框925中发出线程134确定尝试将全局数据的本地副本复制到全局数据是否成功了。如果方框925中的确定为真,则发出线程134成功地将全局数据的本地副本复制到全局数据,因此使控制继续到方框930,在方框930中发出线程134为接收全局锁的节点(取决于哪个节点接收到全局锁,发出线程的节点或下一个有序节点)设置下一层等待指示符230或245,以指示节点拥有全局锁215。然后使控制继续到方框999,在方框999中发出线程134返回到成功解锁操作完成状态,不再允许发出线程访问解锁资源。
如果方框925中的确定为假,则因为另一个线程与尝试复制同时访问全局数据,所以发出线程134未成功地将全局数据的本地副本复制到全局数据,因此使控制返回到如上所述的方框905。如果方框910中的确定为假,则在等待者和持有者列表250中未识别出除了发出线程134在上面执行的节点之外的其他可能节点,因此发出线程拥有全局锁215,并且使控制继续到方框930,如上所述,在方框930中发出线程134为发出线程134在上面执行的节点设置下一层等待指示符以指示节点拥有全局锁215。
如果方框905中的确定为假,则全局待定等待者列表255不是空的,因此使控制继续到方框935,在方框935中发出线程134将全局待定等待者列表255(本地副本)中的全局待定等待者移动到全局等待者和持有者列表250(本地副本)中,并在移动之后清除全局待定等待者列表255(本地副本)。然后使控制继续到方框940,在方框940中发出线程134确定除了发出线程134在上面执行的节点之外的其他节点是否在等待者和持有者列表250(本地副本)中。如果方框940中的确定为真,则在等待者和持有者列表250(本地副本)中识别出除了发出线程134在上面执行的节点之外的至少一个其他节点,因此使控制继续到如上所述的方框915。如果方框940中的确定为假,则在等待者和持有者列表250(本地副本)中未识别出(除了发出线程134在上面执行的节点之外的)其他可能节点,因此使控制继续到方框945,在方框945中发出线程134尝试原子清除全局待定等待者列表255,即,删除全局待定等待者列表255中的所有内容。然后使控制继续到方框950,在方框950中发出线程134确定尝试清除全局待定等待者列表255是否成功了。如果方框950中的确定为真,则清除全局待定等待者列表255成功了,因此使控制继续到如上所述的方框930。如果方框950中的确定为假,则由于另一个线程与发出线程134的尝试清除同时访问全局待定等待者列表255,所以清除全局待定等待者列表255未成功,因此使控制返回到如上所述的方框905。
图10描绘了按照实施例本发明实施例的解锁的进一步示范性处理的流程图。控制流在方框1005上从图7的方框725的真分支进入图10的逻辑图。在方框1005中,发出线程134定位所请求分层锁的全局数据。然后使控制继续到方框1010,在方框1010中发出线程134创建全局数据的本地副本。如下进一步所述,发出线程134使用全局数据的本地副本直到发出线程134进行全局数据的原子更新。然后使控制继续到方框1015,在方框1015中发出线程134从全局数据的本地副本中的等待者和持有者列表250中除去发出线程134在上面执行的节点的标识符。然后使控制继续到方框1020,在方框1020中发出线程134确定全局待定等待者列表255(本地副本)是否是空的。如果方框1020中的确定为真,则全局待定等待者列表255(本地副本)是空的,因此使控制继续到方框1025,在方框1025中发出线程1025确定全局等待者和持有者列表25(本地副本)是否是空的。如果方框1025中的确定为真,则全局等待者和持有者列表250(本地副本)是空的,因此使控制继续到方框1030,在方框1030中发出线程134原子改变全局等待者和持有者列表250(从中清除或除去所有标识符)。然后使控制继续到方框1035,在方框1035中发出线程134确定尝试清除全局等待者和持有者列表250是否成功了。如果方框1035中的确定为真,则清除全局等待者和持有者列表250成功了,因此使控制继续到方框1099,在方框1099中发出线程134返回到成功解锁操作完成状态,不再允许发出线程访问解锁资源。如果方框1035中的确定为假,则原子改变(清除)全局等待者和持有者列表250未成功,因此使控制返回到如上所述的方框1020。
如果方框1025中的确定为假,则全局等待者和持有者列表250不是空的,因此使控制继续到如下进一步所述的图11的方框1105。如果方框1020中的确定为假,则全局待定等待者列表255(本地副本)不是空的,因此使控制继续到如下进一步所述的图11的方框1130。
图11描绘了按照实施例本发明实施例的解锁的进一步示范性处理的流程图。控制流在方框1105上从图10的方框1025进入图11的逻辑图中。在方框1105中,发出线程134确定在等待者和持有者列表250中是否识别出除了发出线程134在上面执行的节点之外的其他节点。如果方框1105中的确定为真,则在等待者和持有者列表250中识别出除了发出线程134在上面执行的节点之外的至少一个其他节点,因此使控制继续到方框1110,在方框1110中发出线程134确定节点的有序列表中移交全局锁的下一个有序节点。然后使控制继续到方框1115,在方框1115中发出线程134尝试用全局数据的本地副本原子地更新全局等待者和持有者列表250和待定等待者列表255。也就是说,发出线程134尝试将全局数据的本地副本复制到全局数据。然后使控制继续到方框1120,在方框1120中发出线程134确定尝试将全局数据的本地副本复制到全局数据是否成功了。如果方框1120中的确定为真,则发出线程134成功地将全局数据的本地副本复制到全局数据,因此使控制继续到方框1125,在方框1125中发出线程134为接收全局锁的节点(取决于哪个节点接收到全局锁,发出线程的节点或下一个有序节点)设置下一层等待指示符230或245,以指示节点拥有全局锁215。然后使控制继续到方框1199,在方框1199中发出线程134返回到成功解锁操作完成状态,指示解锁操作成功了,不再允许发出线程访问解锁资源。如果方框1120中的确定为假,则因为另一个线程与发出线程134同时访问全局数据,所以原子改变全局等待者和持有者列表250和全局待定等待者列表255未成功,因此使控制继续到如上所述的方框1020。
如果方框1105中的确定为假,则等待者和持有者列表250是空的或等待者和持有者列表250只包含发出线程134在上面执行的节点的标识符,因此使控制继续到方框1125,在方框1125中发出线程134设置节点下一层等待指示符230或245,以指示发出线程在上面执行的节点拥有全局锁215。然后使控制继续到方框1199,在方框1199中发出线程134返回到成功解锁操作完成状态,指示解锁操作成功了。
控制流还在方框1130上从图10的假分支进入图11的逻辑图中。在方框1130中,发出线程134将全局待定等待者列表255(本地副本)中的全局待定等待者(节点的标识符)移动到全局等待者和持有者列表250(本地副本)中,在移动之后清除全局待定等待者列表255(本地副本)。然后使控制继续到方框1135,在方框1135中发出线程134确定在等待者和持有者列表250(本地副本)中是否识别出除了发出线程134在上面执行的节点之外的其他节点。如果方框1135中的确定为真,则在等待者和持有者列表250(本地副本)中识别出除了发出线程134在上面执行的节点之外的至少一个其他节点,因此使控制继续到如上所述的方框1110。如果方框1135中的确定为假,则等待者和持有者列表250(本地副本)是空的或等待者和持有者列表250(本地副本)只包含发出线程134在上面执行的节点的标识符,因此使控制继续到方框1140,在方框1140中发出线程134尝试原子更新全局待定等待者列表255(尝试清从中除或除去所有标识符)。然后使控制继续到方框1145,在方框1145中发出线程134确定原子清除全局待定等待者列表255是否成功了。如果方框1145中的确定为真,则清除全局待定等待者列表255成功了,因此使控制继续到如上所述的方框1125,在方框1125中发出线程134为发出线程在上面执行的节点设置节点下一层等待指示符,以指示节点拥有对所请求资源的全局锁。如果方框1145中的确定为假,则由于另一个线程与尝试原子清除同时访问全局待定等待者列表255,所以尝试原子清除全局待定等待者列表255未成功,因此使控制继续到如上所述的图10的方框1020。
这样,在实施例中,提供了减弱对锁的整体竞争使锁的持有者可以容易地更新和释放锁的锁定协议。这是通过在分层结构下将整个锁划分成系统上的线程子集访问的多个数据块实现的。在实施例中,因此通过限制需要访问每个层的线程子集在锁的每个层上减弱竞争,这提高了锁定和解锁共享资源的性能。为了获得整个锁,线程要获取所有分层级上的锁。将分层结构与等待者列表和定域等待指示符的维护相结合。等待获取当前锁定的锁的一个层的每个线程将自身放在等待者列表上,然后等待它的定域等待指示符,以指示该线程获得了该层,减弱对共享数据块的竞争。在实施例中,将锁划分成两个层,其中第一层由位于系统的亲和域内的线程子集访问,第二层在给定时间由来自每个域的最多一个线程访问。在其他实施例中,可以使用任何数量的层。
本文使用的术语只是为了描述特定实施例的目的,而无意限制本发明。如全文所使用,单数形式“一个”、“一种”和“该”等也有意包括复数形式,除非上下文另有明确指出。还要明白,术语“包含”当用在本说明书中时,规定存在所述的特征、整数、步骤、操作、元件、和/或部件,但不排除存在或附加一个或多个其他特征、整数、步骤、操作、元件、部件、和/或它们的群体。在前面对本发明的示范性实施例的详细描述中,参考了形成其一部分,以及通过例示示出可以实践本发明的特定示范性实施例的附图(其中相同标号表示相同元件)。这些实施例得到足够详细描述,使本领域的普通技术人员能够实践本发明,但也可以利用其他实施例以及可以不偏离本发明的范围地作出逻辑上,机械上,电学上和其他方面改变,在前面的描述中,给出了许多具体细节以便使人们透彻理解本发明的实施例。但是,可以不用这些具体细节地实践本发明的实施例。在其他情况下,未详细示出众所周知的电路、结构、和技术,以便不会埋没本发明的实施例。
如用在本说明书内的词汇“实施例”的不同实例未必都指相同实施例,但它们可以这样。例示或描述在本文中的任何数据和数据结构都只是例子,在其他实施例中,可以使用不同数据量、数据类型、字段、字段的数量和类型、字段名称、行的数量和类、记录、条目、或数据的组织。另外,可以将任何数据与逻辑结合,以便使单独数据结构是不必要的。因此,前面的详细描述不是从限制的意义上作出。

Claims (13)

1.一种用于资源分层锁定的方法,包含:
从第一线程接收指定资源的锁定命令;
如果节点锁中的层状态指示对全局数据节点锁当前被拥有,则将第一线程的标识符加入节点锁中的节点等待者列表中,以及如果第一线程的锁定等待指示符指示第一线程对全局数据拥有节点锁,则等待到节点锁中的下一层等待指示符指示任何线程对资源拥有全局锁,然后将对于该锁定命令的成功完成状态返回到第一线程;
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局数据中的全局等待者和持有者列表是空的,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程;
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局数据中的全局待定等待者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程;以及
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符未在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程。
2.如权利要求1所述的方法,进一步包含:
如果层状态指示没有线程对全局数据拥有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局等待者和持有者列表不是空的,锁定命令是试锁尝试命令,以及节点等待者列表是空的,则将节点锁中的层状态改变成指示没有线程拥有节点锁,并且将对于该锁定命令的失败完成状态返回到第一线程。
3.如权利要求2所述的方法,进一步包含:
如果层状态指示没有线程对全局数据拥有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局等待者和持有者列表不是空的,锁定命令是试锁尝试命令,以及节点等待者列表不是空的,则确定线程顺序中移交节点锁的下一个有序节点线程,从节点等待者列表中除去下一个有序节点线程的标识符,将下一个有序节点线程的锁定等待指示符设置成指示下一个有序节点线程从发出试锁尝试命令的第一线程获得了节点锁,并且将对于该锁定命令的失败完成状态返回到第一线程。
4.如权利要求2所述的方法,进一步包含:
从第一线程接收指定资源的解锁命令;以及
如果节点等待者列表是空的,则将层状态改变成指示节点锁未被持有,从全局等待者和持有者列表中除去第一线程的标识符,以及如果全局待定等待者列表和全局等待者和持有者列表是空的,则将对于该解锁命令的成功完成状态返回到第一线程。
5.如权利要求4所述的方法,进一步包含:
如果全局待定等待者列表不是空的,则将节点的标识符从全局待定等待者列表移动到全局等待者和持有者列表中;
如果在全局等待者和持有者列表中识别出除了第一节点之外的任何其他节点,则确定移交全局锁的下一个有序节点,在接收全局锁的下一个有序节点上设置节点下一层等待指示符,以指示下一个有序节点拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程;以及
如果在全局等待者和持有者列表中只识别出第一线程在上面执行的第一节点,则清除全局待定等待者列表。
6.如权利要求4所述的方法,进一步包含:
如果节点等待者列表不是空的,则确定移交节点锁的下一个有序节点线程,从节点等待者列表中除去下一个有序节点线程,以及如果下一个有序节点线程在线程顺序中在第一线程之后,则在下一个有序节点线程中设置锁定等待指示符,以指示下一个有序节点线程拥有节点锁和全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程;以及
如果下一个有序节点线程在线程顺序中在第一线程之前,则在下一个有序节点线程中设置锁定等待指示符,以指示下一个有序节点线程拥有节点锁,以及如果全局待定等待者列表是空的,则为第一线程设置下一层等待指示符,以指示第一线程拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程。
7.如权利要求4所述的方法,进一步包含:
如果全局待定等待者列表不是空的,则将节点标识符从全局待定等待者列表移动到全局等待者和持有者列表中,以及如果在全局待定等待者列表中只存在第一线程在上面执行的第一节点的标识符,则清除全局待定等待者列表,为第一线程在上面执行的第一节点设置下一层等待指示符,以指示第一线程拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程。
8.一种用于资源分层锁定的计算机系统,包含:
处理器;以及
可通信地与该处理器耦合的存储器,其中用指令编码该存储器,其中该指令当被该处理器执行时包含:
从第一线程接收指定资源的锁定命令;
如果节点锁中的层状态指示对全局数据节点锁当前被拥有,则将第一线程的标识符加入节点锁中的节点等待者列表中,以及如果第一线程的锁定等待指示符指示第一线程对全局数据拥有节点锁,则等待到节点锁中的下一层等待指示符指示任何线程对资源拥有全局锁,然后将对于该锁定命令的成功完成状态返回到第一线程;
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局数据中的全局等待者和持有者列表是空的,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程;
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局数据中的全局待定等待者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程;
如果层状态指示没有线程对全局数据持有节点锁,则将层状态改变成指示节点锁被拥有,以及如果第一线程在上面执行的第一节点的标识符未在全局等待者和持有者列表中,则将第一线程在上面执行的第一节点的标识符加入全局等待者和持有者列表中,并且将对于该锁定命令的成功完成状态返回到第一线程;以及
如果层状态指示没有线程对全局数据拥有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局等待者和持有者列表不是空的,锁定命令是试锁尝试命令,以及节点等待者列表是空的,则将节点锁中的层状态改变成指示没有线程拥有节点锁,并且将对于该锁定命令的失败完成状态返回到第一线程。
9.如权利要求8所述的计算机系统,其中该指令进一步包含:
如果层状态指示没有线程对全局数据拥有节点锁,则将层状态改变成指示节点锁被拥有,以及如果全局等待者和持有者列表不是空的,锁定命令是试锁尝试命令,以及节点等待者列表不是空的,则确定线程顺序中移交节点锁的下一个有序节点线程,从节点等待者列表中除去下一个有序节点线程的标识符,将下一个有序节点线程的锁定等待指示符设置成指示下一个有序节点线程从发出试锁尝试命令的第一线程获得了节点锁,并且将对于该锁定命令的失败完成状态返回到第一线程。
10.如权利要求8所述的计算机系统,其中该指令进一步包含:
从第一线程接收指定资源的解锁命令;以及
如果节点等待者列表是空的,则将层状态改变成指示节点锁未被持有,从全局等待者和持有者列表中除去第一线程的标识符,以及如果全局待定等待者列表和全局等待者和持有者列表都是空的,则将对于该解锁命令的成功完成状态返回到第一线程。
11.如权利要求10所述的计算机系统,其中该指令进一步包含:
如果全局待定等待者列表不是空的,则将节点的标识符从全局待定等待者列表移动到全局等待者和持有者列表中;
如果在全局等待者和持有者列表中识别出除了第一节点之外的任何其他节点,则确定移交全局锁的下一个有序节点,在接收全局锁的下一个有序节点上设置节点下一层等待指示符,以指示下一个有序节点拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程;以及
如果在全局等待者和持有者列表中只识别出第一线程在上面执行的第一节点,则清除全局待定等待者列表。
12.如权利要求10所述的计算机系统,其中该指令进一步包含:
如果节点等待者列表不是空的,则确定移交节点锁的下一个有序节点线程,从节点等待者列表中除去下一个有序节点线程,以及如果下一个有序节点线程在线程顺序中在第一线程之后,则在下一个有序节点线程中设置锁定等待指示符,以指示下一个有序节点线程拥有节点锁和全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程;以及
如果下一个有序节点线程在线程顺序中在第一线程之前,则在下一个有序节点线程中设置锁定等待指示符,以指示下一个有序节点线程拥有节点锁,以及如果全局待定等待者列表是空的,则为第一线程设置下一层等待指示符,以指示第一线程拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程。
13.如权利要求10所述的计算机系统,其中该指令进一步包含:
如果全局待定等待者列表不是空的,则将节点标识符从全局待定等待者列表移动到全局等待者和持有者列表中,以及如果在全局待定等待者列表中只存在第一线程在上面执行的第一节点的标识符,则清除全局待定等待者列表,为第一线程在上面执行的第一节点设置下一层等待指示符,以指示第一线程拥有全局锁,并且将对于该解锁命令的成功完成状态返回到第一线程。
CN201310491869.6A 2012-10-19 2013-10-18 用于资源的分层锁定的方法和系统 Expired - Fee Related CN103778003B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201261715987P 2012-10-19 2012-10-19
US61/715,987 2012-10-19
US13/804,201 2013-03-14
US13/804,201 US9250976B2 (en) 2012-10-19 2013-03-14 Tiered locking of resources

Publications (2)

Publication Number Publication Date
CN103778003A CN103778003A (zh) 2014-05-07
CN103778003B true CN103778003B (zh) 2017-03-01

Family

ID=50486398

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310491869.6A Expired - Fee Related CN103778003B (zh) 2012-10-19 2013-10-18 用于资源的分层锁定的方法和系统

Country Status (2)

Country Link
US (2) US9250976B2 (zh)
CN (1) CN103778003B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940269B2 (en) * 2016-01-22 2018-04-10 International Business Machines Corporation Conditionally releasing locks in response to requests
US11347712B2 (en) 2017-11-07 2022-05-31 International Business Machines Corporation Preventing long running transactions from holding record locks
CN108985629B (zh) * 2018-07-17 2022-04-08 创新先进技术有限公司 业务链中业务节点的执行方法、装置及服务器
CN112130973A (zh) * 2020-08-28 2020-12-25 北京思特奇信息技术股份有限公司 一种多线程同步并发的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7103631B1 (en) * 1998-08-26 2006-09-05 Qnx Software Systems Symmetric multi-processor system
TWI262397B (en) * 2003-01-16 2006-09-21 Ibm Method and multiprocessor computer apparatus for controlling access to a shared resource using a task synchronization mechanism
CN101375250A (zh) * 2006-02-03 2009-02-25 甲骨文国际公司 自适应区域锁定
CN103064898A (zh) * 2012-12-17 2013-04-24 华为技术有限公司 事务加锁、解锁方法及装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161227A (en) * 1989-11-13 1992-11-03 International Business Machines Corporation Multilevel locking system and method
US5596754A (en) * 1992-10-29 1997-01-21 Digital Equipment Corporation Method for performing private lock management
US5613139A (en) * 1994-05-11 1997-03-18 International Business Machines Corporation Hardware implemented locking mechanism for handling both single and plural lock requests in a lock message
US5682537A (en) * 1995-08-31 1997-10-28 Unisys Corporation Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system
US5761670A (en) * 1995-12-08 1998-06-02 Sun Microsystems, Inc. System and method for space efficient object locking using global and local locks
US6088757A (en) * 1998-08-28 2000-07-11 International Business Machines Corporation Computer program means and device for conducting high performance locking facility in a loosely coupled environment
US7058948B2 (en) * 2001-08-10 2006-06-06 Hewlett-Packard Development Company, L.P. Synchronization objects for multi-computer systems
US7209990B2 (en) * 2005-04-05 2007-04-24 Oracle International Corporation Maintain fairness of resource allocation in a multi-node environment
US8560524B2 (en) * 2008-10-30 2013-10-15 Hewlett-Packard Development Company, L.P. Allocating priorities to prevent deadlocks in a storage system
US9213586B2 (en) * 2009-03-18 2015-12-15 Sas Institute Inc. Computer-implemented systems for resource level locking without resource level locks
US8601486B2 (en) * 2011-05-31 2013-12-03 International Business Machines Corporation Deterministic parallelization through atomic task computation
US8458721B2 (en) * 2011-06-02 2013-06-04 Oracle International Corporation System and method for implementing hierarchical queue-based locks using flat combining
US20130080672A1 (en) * 2011-09-27 2013-03-28 Kaminario Technologies Ltd. System, method and computer program product for access control
US9678897B2 (en) * 2012-12-27 2017-06-13 Nvidia Corporation Approach for context switching of lock-bit protected memory

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7103631B1 (en) * 1998-08-26 2006-09-05 Qnx Software Systems Symmetric multi-processor system
TWI262397B (en) * 2003-01-16 2006-09-21 Ibm Method and multiprocessor computer apparatus for controlling access to a shared resource using a task synchronization mechanism
CN101375250A (zh) * 2006-02-03 2009-02-25 甲骨文国际公司 自适应区域锁定
CN103064898A (zh) * 2012-12-17 2013-04-24 华为技术有限公司 事务加锁、解锁方法及装置

Also Published As

Publication number Publication date
US20140115215A1 (en) 2014-04-24
US20140115213A1 (en) 2014-04-24
CN103778003A (zh) 2014-05-07
US9250976B2 (en) 2016-02-02
US9250977B2 (en) 2016-02-02

Similar Documents

Publication Publication Date Title
JP6802287B2 (ja) キャッシュ・メモリ・アクセス
KR100641988B1 (ko) 비대칭형 단일 칩 이종 멀티프로세서 컴퓨터 시스템, 공유 메모리의 직접 메모리 액세스를 아토믹 업데이트하는 방법, 및 아토믹 업데이트 장치
Ooi et al. SINGA: A distributed deep learning platform
CN104380269B (zh) 高性能互连相干协议
CN104714848B (zh) 利用用于聚结内存事务的指示的方法和系统
US20180173673A1 (en) Atomic Object Reads for In-Memory Rack-Scale Computing
Sorin et al. Specifying and verifying a broadcast and a multicast snooping cache coherence protocol
CN104115124B (zh) 对在多个计算节点上执行的源代码实施更新
CN105393212B (zh) 使用锁定机制进行高效任务调度的方法、系统和存储介质
CN102999406A (zh) 从硬件故障模式的增强转储数据收集的方法和系统
TWI637265B (zh) 支援不同優先順序之異動性儲存器存取之方法、單元、系統及電腦程式產品
US10824567B2 (en) Selectively preventing pre-coherence point reads in a cache hierarchy to reduce barrier overhead
CN103778003B (zh) 用于资源的分层锁定的方法和系统
CN104375958A (zh) 高速缓存存储器管理事务性存储器访问请求
CN101535950A (zh) 软件事务提交次序和冲突管理
CN106030522B (zh) 利用基于二进制翻译的处理器的锁省略
US10042765B2 (en) Read and write sets for transactions of a multithreaded computing environment
BR112019009566A2 (pt) aparelhos e métodos para uma arquitetura de processador
CN104106043A (zh) 用于包括屏障指令的指令序列的处理器性能改进
CN110399383A (zh) 应用于服务器的数据处理方法、装置、计算设备、介质
US10216519B2 (en) Multicopy atomic store operation in a data processing system
CN103778017A (zh) 改进虚拟处理器调度的亲和性
CN106293894A (zh) 执行事务性功率管理的硬件设备和方法
CN108885569A (zh) 识别增强型同步操作结果以改善运行时操作
US20200201765A1 (en) Selectively updating a coherence state in response to a storage update

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170301

CF01 Termination of patent right due to non-payment of annual fee