CN102880518A - 实现公平可缩放的读者写者互斥的方法和装置 - Google Patents

实现公平可缩放的读者写者互斥的方法和装置 Download PDF

Info

Publication number
CN102880518A
CN102880518A CN201210319993.XA CN201210319993A CN102880518A CN 102880518 A CN102880518 A CN 102880518A CN 201210319993 A CN201210319993 A CN 201210319993A CN 102880518 A CN102880518 A CN 102880518A
Authority
CN
China
Prior art keywords
thread
queue nodes
queue
reader
formation
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.)
Granted
Application number
CN201210319993.XA
Other languages
English (en)
Other versions
CN102880518B (zh
Inventor
A·库卡诺夫
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN102880518A publication Critical patent/CN102880518A/zh
Application granted granted Critical
Publication of CN102880518B publication Critical patent/CN102880518B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

实现公平可缩放的读者写者互斥以便由处理系统中多个处理线程访问临界段,通过如下完成:为第一线程在第一线程的栈上创建第一队列节点,该队列节点表示第一线程对访问临界段的请求;将第一节点加入由用于所述临界段的单字读者写者互斥体指向的队列,该队列表示期望访问临界段的线程列表,该队列中的每一队列节点位于所述多个处理线程中的一线程的栈上;等待直到由队列中的先前队列节点指示该第一队列节点没有在前的写入请求;由第一线程进入所述临界段;由第一线程退出所述临界段;以及从该队列中清除第一队列节点。

Description

实现公平可缩放的读者写者互斥的方法和装置
本申请是PCT国际申请号为PCT/US2006/030521、国际申请日为2006年8月3日、中国国家申请号为200680031472.7、题为“实现公平可缩放的读者写者互斥的方法和装置”的申请的分案申请。
本专利文献所揭示的部分内容包含受到版权保护的材料。当其出现在专利商标局的专利文件或纪录中时,版权人不反对任何人复制本专利文件或专利揭示内容,但是保留任何版权所有。
技术领域
本发明一般地涉及多线程编程,尤其涉及在多线程编程环境下读者(reader)与写者(writer)的互斥(mutual exclusion)。
背景技术
互斥是一种编程技术,其通常通过使用信息量(semaphore)来确保同一时刻只有一个程序或例程可以访问某些资源,例如存储器位置、输入/输出(I/O)端口或文件,其中信息量是程序中用以协调一个以上程序或例程活动的标志。用于执行互斥(或互斥体(mutex))的对象可称为一个锁定(lock)。
读者-写者(RW)锁定允许多个读者查阅共享数据,或者允许单个写者排他地访问以修改此数据。在共享存储器的多处理器上,获得和释放这些锁定所需的开销对并行应用程序的性能有很大的影响。这些锁定初级实现
Figure BDA00002085232600011
Figure BDA00002085232600012
(其中处理器绕全局锁定变量旋转以等待锁定变为可用)的主要问题,是当所述锁定被竞争时,包含所述锁定的存储器以及连接到该存储器的互连网络也会被竞争。
现有技术的各种方法实现可缩放的排他锁定,即能够被竞争而不导致存储器或者互连竞争的排他锁定。这些方法取决于高速缓存硬件支持或者本地存储器的存在,其中访问本地存储器的等待时间低于访问远程存储器的等待时间。
在1991年4月在弗吉尼亚州威廉斯堡举行的第三届有关并行程序的原理和实践的ACM研讨会文集第106-113页(Proceedings ofthe 3rd ACM Symposiumon Principle and Practice of Parallel Programming,pp.106-113,Williamsburg,VA,April 1991)由John M.Mellor-Crummey和Michael L.Scott发表的“ScalableReader-Writer Synchronization for Shared-Memory Multiprocessors”一文中,作者描述了一种使用原子运算以建立等待处理器的单链表(singly linked list)的排他锁定。列表首部的处理器拥有该锁定,而新处理器则将自己加入列表尾部。与在绕全局锁定变量旋转不同,每一处理器在其本地存储器内绕一个变量旋转。处理器通过归零该变量来释放所述锁定,而下一个处理器在绕该变量旋转的队列中排队。
对于这种排他锁定的RW变量,每一队列元素包括一附加的变量来保存请求的状态。当新的读者请求达到时,就检查队列中前一元素的状态以确定新请求是否必须阻止。有了RW锁定,读者必须能够以任何顺序释放锁定。因此,当读者出队时,Mellor-Crummey和Soctt的单链表变得不连续。为了允许这种状况,在他们的排他锁定中加入两个全局变量,一个是活动读者数量的计数,一个是队列中第一写者的指针。当读者获得和释放锁定时,它们保持活动读者的全局计数最新。当释放锁定时,如果读者发现读者计数为零,其解除对全局变量指向的写者的阻止。
在1993年有关并行进程的国际会议文集(Proceedings of the 1993International Conference on Parallel Processing)中由Orran Krieger、MichaelStumm、Ron Unrau和Jonathan Hanna发表的“A Fair Fast Scalable Reader-WriterLock”一文中,作者描述了一种从Mellor-Crummey和Scott的排他锁定算法中导出的公平可缩放的RW锁定算法。在Krieger等人的方法中,并不是加入更多的全局状态(其可变为被竞争),而是把RW锁定需要的额外状态在与该锁定关联的列表中分配。更具体地,读者被保持在双链表(doubly linked list)中。利用双链表,代替对全局变量的同步,正在释放锁定的读者可与其最近的邻近读者同步以从队列中移除其本身。这允许读者以任何顺序出队而列表也不会变得不连续。因此,不必保持对第一写者的全局指针,也不必保持对活动读者数量的全局计数。
上面讨论的两种现有技术至少存在各种不足。在上述的每一方法中,不能将队列节点分配在栈中,因为有时调用者提供的队列节点会被其他线程读取或写入,甚至在调用者释放了互斥体上它的锁定之后。这些方法要求将队列节点分配在堆(heap)中,这比栈分配慢,并且可能需要获得该堆本身上的其他锁定。此外,这些方法要求队列节点在互斥体的生存期内永不被释放,也不能以某种方式被原子性地参考计数以确定何时释放它们是安全的(这在多线程环境中相比普通的读和写是开销巨大的)。这些方法还要求队列节点存在的时间比获得和释放锁定之间的时间更长。另外,Krieger等人的方法中,当读者在其前任已经观察到没有后继者可以解除阻止时预期会被其前任解除阻止时,有时允许读者阻止其他读者,这导致读者阻止直到所有之前的读者释放互斥体。
因此,多线程编程技术需要进一步改进以克服这些和其他缺陷。
发明内容
本发明提出了一种实现公平可缩放的读者写者互斥以便由处理系统中多个处理线程访问临界段的方法,所述方法包括:为第一线程在所述第一线程的栈上创建第一队列节点,所述队列节点表示所述第一线程访问所述临界段的请求;将所述第一队列节点加入由用于所述临界段的单字读者写者互斥体指向的队列,所述队列表示期望访问所述临界段的线程列表,所述队列中的每一队列节点位于所述多个处理线程中的一线程的栈上;等待直到由所述队列上的先前队列节点指示所述第一队列节点没有在前的写入请求;由所述第一线程进入所述临界段;以及在所述第一线程退出所述临界段之后,从所述队列中移除所述第一队列节点,其中,作为读者的线程绝不阻止作为读者的另一线程。
本发明还提供了一种用于实现公平可缩放的读者写者互斥体以便由处理系统中多个处理线程访问临界段的装置,所述装置包括:用于为第一线程在所述第一线程的栈上创建第一队列节点的装置,所述第一队列节点表示由所述第一线程对访问所述临界段的请求;用于将所述第一队列节点加入由用于所述临界段的单字读者写者互斥体指向的队列的装置,所述队列表示期望访问所述临界段的线程列表,所述队列中的每一队列节点位于所述多个处理线程中的一线程的栈上;用于等待直到由所述队列上的先前队列节点指示所述第一队列节点没有在前的写入请求的装置;用于由所述第一线程进入所述临界段的装置;以及用于在所述第一线程退出所述临界段之后从所述队列中移除所述第一队列节点的装置,其中,作为读者的线程绝不阻止作为读者的另一线程。
附图说明
通过下面的本发明的详细描述,本发明的特征和优点将会变得显而易见,其附图中:
图1是根据本发明一个实施例的读者写者互斥体的示例性队列的示意图;
图2是根据本发明一个实施例的队列节点的示意图;
图3是根据本发明一个实施例的使用具有读者写者互斥体的队列的流程图;
图4是根据本发明一个实施例并详细示出队列节点值的图1所示示例性队列的示意图;以及
图5是根据本发明一个实施例示出队列节点状态值UnblockNext的使用的示意图。
具体实施方式
本发明的一个实施例是一个读者-写者互斥体过程,该过程以克服在前读者-写者互斥体缺陷的方式实施读者和写者的互斥。处理线程在进入一临界段之前获得互斥体上的“读者锁定”或“写者锁定”,并在之后释放它们的锁定。互斥体的工作是确保若一写者在临界段(critical section)中,则该写者就是那里唯一的线程。典型地,读者-写者互斥体起到保护数据结构一致性的作用。希望修改此结构的线程只有在获得写者锁定之后才能这么做。读者-写者互斥体优于普通互斥体之处在于多个读者可同时进行,因此重要的是读者绝不阻止读者。
本说明书中引用本发明的“一个实施例”或“一实施例”意思是连同该实施例一起描述的特定特征、结构或特性是包含在本发明的至少一实施例中。于是,在本说明书中的不同位置多次出现的短语“在一个实施例中”并不一定指代同一实施例。
一线程在其进入临界段前可能不得不等待其他线程离开。本发明是“公平的”是因为它以“先到先服务”的顺序服务于线程,这确保没有线程会被阻延而一直等待。等待中的线程不应该消耗存储器带宽;否则它会减慢其他线程。等待通过“本地旋转”来完成,这意味着读取一个没有其他处理器会频繁接触的高速缓存线,直到其他线程更新此高速缓存线以告知“继续进行”。
RW互斥体可利用队列来实现。此队列包括零或更多个根据需要建立和销毁的队列节点。此互斥体包括指向队列尾部的单字(word)。在本发明的实施例以及此处的使用中,“字”定义处理系统中需要用以储存指针值的存储器容量。当处理线程要求对互斥体保护的临界段进行读或写访问时,它们会将请求放到该队列上。访问请求由队列节点表示。每一线程提供将绕其旋转的队列节点。当队列节点位于队列首部时,创建此队列节点的线程会被授权访问该临界段。在本发明的一个实施例中,在线程的栈上创建队列节点。RW互斥体指向队列的尾部以指示下一个希望访问临界段的线程可被链接到哪里。
图1是根据本发明一个实施例的读者写者互斥体的示例性队列的示意图。图1示出处于不同阶段的4个线程。线程1100和线程2102是临界段内部的读者。线程1100包括栈104。线程1已于之前在其堆栈104中创建队列节点1106。队列节点1106目前是用于读者写者互斥体108的队列的首部。线程1还包括指令指针110以指定正在被此线程执行的当前指令。当线程1在临界段内时,指令指针引用临界段内的存储器。类似地,线程2102包括栈112。线程2已于之前在其栈112内创建队列节点2114并链接队列节点2到用于RW互斥体的队列中。线程2还包括指令指针116以指定正在被此线程执行的当前指令。当线程2在临界段内时,此指令指针引用临界段内的存储器。线程3118是一个写者,正等待2个之前的读者(即,线程1和2)离开后进入临界段。线程3包括包含队列节点3122的栈120,以及指令指针124。线程4126是一个读者,它正在其栈130上构建队列节点4128,准备将该节点加入到队列中。当线程4将队列节点4128加入队列后,线程4会等待直到之前的写者(线程3)发信号通知它已经离开临界段。一旦队列节点4128被加入队列中,读者写者互斥体108会变化以指向队列节点4128为队列的新尾部。线程4也包括指令指针130。
图2是根据本发明一个实施例的使用具有读者写者互斥体的队列的流程图。在框200,期望访问临界段的一线程在该线程的栈上创建队列节点。这是图1所示例子中线程4126所处的步骤。在框202,该线程将新创建的队列节点加入到队列的尾部。在框204,该线程通过绕其队列节点旋转来等待进入临界段。这是图1所示例子中线程3118所处的步骤。在框206,当线程获得锁定时,该线程被允许进入临界段。这是图1所示例子中线程1100和线程2102所处的步骤。在框208,线程退出临界段。在框210,线程从队列中移除该队列节点。最后,在框212,线程从线程的栈中删除该队列节点。
图3是根据本发明一个实施例的队列节点300的详细结构图。一个队列节点包括一个表示要获得互斥体并访问临界段的请求的数据结构,并且包括至少5个字段。NodeState(节点状态)字段302规定关于或对于拥有线程的信息。根据本发明的一个实施例,此值可为Writer(写者)、Reader(读者)UnblockNext(解除阻止下一个)或ActiveReader(活动读者)。Writer状态指示线程计划写入数据至临界段中。Reader状态指示线程计划读取临界段中的数据。根据本发明的一个实施例,UnblockNext状态让后续线程发信号通知它只是部分地链接了其自身的队列节点,因此当前线程应等待直到后续队列节点完全链接。ActiveReader状态指示该线程正在临界段中且活动地读取数据。Next(下一个)字段304是队列中的下一队列节点的指针(指向队列尾部)。Next字段指向储存在另一线程的栈内的队列节点。WaitState(等待状态)字段306规定线程的等待状态(线程是等待还是继续进行)。根据本发明的一个实施例,其类型可以是Spin(旋转)、Going(行进)或Busy(忙碌)。Spin状态指示线程正在等待。Going状态指示线程可访问临界段。根据本发明的实施例,Busy状态指示队列节点还不能被删除。这避免在所有线程完成访问队列节点之前太早的破坏它。Previous(前一,Prev)字段308是队列中前一队列节点的指针(指向队列首部)。根据本发明的实施例,Flag(标志)字段309可包括Previous字段中的一个否则不会被使用的位(例如,一低数位),作为协调从队列中移除队列节点的标志位。EL字段310包括一简单旋转互斥体,用于辅助从队列中间删除读者的原子性。
表I显示ReaderWriterMutex(读者写者互斥体)和QueueNode(队列节点)的内部结构。为了便于与现有技术比较,加下划线的文字指示本发明相对于Krieger等人的参考文献中披露的代码增加的代码,加删除线的文字表示本发明相对于Krieger等人的参考文献中披露的代码删除的代码。文体上和明显的修改未被标出。
表I
Figure BDA00002085232600071
图4是根据本发明一个实施例的详细示出样本队列节点值的图1所示示例性队列的示意图。读者写者互斥体结构108包括指向队列尾部(Qtail)的指针。队列节点1106具有值为ActiveReader的NodeState字段,且队列节点1的WaitState字段被设置为Going,因为创建队列节点1的线程已访问临界段并且是读者。Next字段指向队列中的下一队列节点(即,队列节点2114)。Prev字段指向空(null),因为此队列节点是队列首部。队列节点1的EL字段是Unlocked(开锁)。类似地,队列节点214具有值为ActiveReader的NodeState字段,且队列节点2的WaitState字段被设置为Going,因为创建队列节点2的线程已访问临界段并且是读者。Next字段指向队列中的下一队列节点(如队列节点3122)。Prev字段指向队列节点1因为在队列中该队列节点在队列节点2的前面。队列节点2的EL字段是Unlocked。
对于队列节点3122,NodeState字段的值是Writer。Next字段指向null因为队列节点3当前是队列的尾部。WaitState字段被设置为Spin,因为队列节点3正在等待轮到其访问临界段。Prev字段指向队列中的前一队列节点(如队列节点2114)。队列节点3的EL字段是Unlocked。
对于队列节点4128,NodeState字段的值是Reader。Next字段和Prev字段指向null,因为此队列节点是新创建的,还未链接到队列。WaitState字段被设置为Spin,因为队列节点4正在等待轮到其访问临界段。Flag被设置为零。队列节点4的EL字段是Unlocked。
表II显示处理线程中的用于读者的典型调用顺序。相似的程序调用也可用于写者。在本发明的实施例中,调用中的线程可在其栈上分配其队列节点。Krieger等人和Mellor-Crummey的引用文献中所披露的技术对读者不允许如此。
表II
Figure BDA00002085232600091
表III至VII描述本发明的实施例的附加运算。表III定义本发明的实施例所要求的原子运算。这些原子运算是FetchAndStore(取和储存)、CompareAndSwap(比较和交换)以及FetchAndAdd(取和加)。这些运算存在于大多数现代计算硬件中,尤其是可从Intel公司购得的处理器,例如名为IA-32的32位处理器架构,以及名为Itanium Processor Family(IPF)的64位架构。在表III中,“T”指示正被原子性更新的存储器位置的类型,“*”指示类型指针。
表III
Figure BDA00002085232600101
Figure BDA00002085232600111
表IV和V显示如何获得和释放“写者锁定”。这些程序与Krieger等人在参考文献中所披露的方法类似,并提供在此以帮助理解它们如何与本发明的实施例的技术相交互。符号“&x”指示指向位置x的指针的构造。当线程尝试获得互斥体上的写者锁定时(表IV),此线程使其队列节点入队,且如果其不是队列中的唯一节点,则等待其前任将其WaitState设置为Going。当该线程释放锁定(表V)且有一个后续队列节点时,此线程通过将后者的WaitState改变为Going发信号通知下一线程行进。
表IV
Figure BDA00002085232600112
Figure BDA00002085232600121
表V
Figure BDA00002085232600122
表VI显示如何获得一个读者锁定。线程使用FetchAndStore程序调用来使其队列节点入队。如果线程有一个前任(其是队列尾部的旧队列节点),则其原子性地检查该前任是否有READER的NodeState,若是,则将NodeState字段送入UnblockNext状态。如果该前任不是ActiveReader,则此线程绕其自身的队列节点的WaitState字段旋转,直到其被先前的线程设置为Going。然后此线程设法原子性地转化其NodeState从Reader至ActiveReader。如果这失败了,则此线程指示其有一个需要被解除阻止的后继者。为解除阻止此后继者,此线程等待直到此后继者的队列节点被链接至队列(通过等待“node->Next!=NULL”),才设置此后继者的队列节点的WaitState为Going,且随后当前线程成为ActiveReader。
表VI
Figure BDA00002085232600123
表VII显示如何释放读者锁定。此方法取决于在“Prev”指针字段中具有一未使用的位FLAG(例如,如果队列节点是16位排列的,则该指针的最低位可用作FLAG)。FLAG位用于协调两个线程试图移除队列中的相邻节点的情形。该线程使用FetchAndAdd程序调用以原子性地获取“Prev”,并同时通过设置FLAG位来标志其为“使用中”。(逻辑上说,这是一个“FetchAndOr(取和或)”,但是Intel处理器只支持FetchAndAdd,且在此情形下这两种运算是相同的,因为FLAG位在FetchAndAdd之前一直是0)。
表VII
Figure BDA00002085232600161
如果有一个前任,则此线程设法获得绕该前任的旋转锁定。如果不能,这意味着前任的所有者正试图从队列中移除此前任,而当前线程应等待直到该移除已完成,并与新的前任重试。有趣的是,它通过旋转直至“node->Prev!=pred+FLAG”来检测此移除已完成,且随后在Pred->EL上释放此前任线程获得的锁定。此方案是不寻常的,因为线程释放了另一线程获得的锁定。否则,在已经成功获得前任的旋转锁定后,该线程获得绕其自身的队列节点的旋转锁定并将其从队列中移除,并注意在需要时更新队列尾部指针(“m->Qtail”)。它随后释放绕前任的旋转锁定并行进到“Unlock_Self”标签。
如果FetchAndAdd程序调用的结构指示没有前任,则线程获得绕其自身队列节点的旋转锁定。如果此线程没有后继者,则此线程尝试使用“CompareAndSwap(m->Qtail,NULL,node”)来改变队列为空。如果成功,处理在“Unlock_Self”标签继续。如果没有成功,这意味着另一线程正忙于附加一后续队列节点到队列,因此线程等待直到“node->Next!=NULL”。该线程随后发信号通知下一线程其可继续进行。这一信令需要小心执行,因为设置Prev字段为NULL或设置WaitState为Going都可能会导致拥有的线程继续进行,并可能在当前线程使用完此队列节点之前继续到销毁对应的队列节点的指针。为避免这一问题,当前线程在设置后继者的Prev指针为NULL及设置WaitState为Going之前,临时设置后继者的WaitState为Busy。在此也注意,该过程使用FetchAndStore来设置后继者的Prev字段,这对最后的“Unlock_Self”步骤是必须的。
表VII中的“Unlock_Self”步骤实现该协议。这里,变量tmp是当前节点断开链接之前的“node->Next->Prev”的值。如果tmp的FLAG位未被设置,则当前线程释放当前线程获得的绕其队列节点旋转锁定。但是如果FLAG位被设置,这指示后继队列节点的拥有者在重试循环中,而当前线程必须等待此后继线程释放当前线程获得的所述队列节点上的锁定。最后,此线程等待直到node->WaitState!=Busy,在这之后该线程获悉可安全返回(并销毁节点)。
图5是示出根据本发明一个实施例的NodeState值UnblockNext的使用的示意图。在此例中,有3个参与的线程,每一个在其栈上具有队列节点。拥有队列节点4502的线程已经作为读者进入临界段。其他2个队列节点最近已将它们的队列节点(队列节点5504和队列节点6506)加入到由读者写者互斥体500指向的队列中。队列节点5的拥有者尝试将其NodeState从Reader改变为ActiveReader。然而同时,在此尝试前,队列节点6506的拥有者将(队列节点5的)NodeState从Reader改变为UnblockNext,以便通知队列节点5的拥有者其具有一后继者,且应当等待直到其Next字段变为非空(即,如破折线箭头所示那样设置)。这些通知是在没有任何内部锁定的状况下被全部完成。
本发明的实施例具有至少3个优于绕本地存储器旋转的现有读者-写者互斥体的优点。首先,它允许在调用者的栈上分配队列节点。之前的读者-写者互斥体(如Kreiger等人和Mellor-Crummey等人的)不允许队列节点是栈分配的,因为由调用者提供的队列节点有时会被其他线程读取或写入,即使是在此调用者已经释放其在互斥体上的锁定之后。公知的现有技术要求队列节点是堆分配的,这通常比栈分配要慢,且确实会要求获得堆本身上的其他锁定。此外,公知的现有技术要求队列节点在互斥体的生存期内永不被释放,也无法以某种方式被原子性地参考计数以确定何时释放它们是安全的。相比普通的读和写而言,原子的参考计数本身在多线程环境中开销相对较大。本发明的实施例保证线程直到其他节点不再访问其队列节点时才离开互斥体释放程序;这样线程可在其自身的栈上分配其队列节点。
第二,本发明的实施例绝不允许读者阻止其他读者,正如Krieger等人的方法当读者在其前任已经观察到没有后继者要解除阻止时预期会被其前任解除阻止时有时会做的那样,这导致读者阻止直到所有之前的读者释放互斥体。
第三,本发明的实施例只为互斥体使用单字,而Mellor-Crummey等人的方法则需要3个字,这造成现有的设计在细粒度(fine-grained)的锁定的应用程序中大得多的开销。原因是通常在细粒度的情形下,每一数据元素均需要一互斥体,但一个线程只持有一个锁定(或少数锁定)。因此以可能造成锁定对象变大为代价来保持互斥体对象较小是值得的。
另一优点是本发明的实施例很好地符合C++的广泛用于异常安全代码编写的“资源获得是初始化”习惯。在将该习惯应用于互斥体的情况下,构建代表锁定获得的对象,而该对象的销毁则释放此锁定。如果在临界段中抛入异常,对象会被隐式地销毁,这样就自动释放锁定。这应用于本发明的各实施例是因为该对象本身可以是(或者作为成员包含)队列节点。Kreiger等人和Mellor-Crummey等人的现有技术参考文献都不允许这样经济的措施,因为他们要求队列节点的存在时间比获得和释放锁定之间的时间更长。
本发明的实施例通过具有一个从不引用可能已经被另一线程销毁的队列节点的协议,来启用队列节点的栈分配。这源于多种技术的使用。首先,使用原子运算和在Prev指针中的标记位,从而节点的拥有者可与前一节点的拥有者握手。使用原子运算和标记位之前已用于从链表中移除项目的无锁定算法(例如在2001年IEEE有关分布式计算的研讨会文集(Proc.Of 2001IEEESymposium on Distributed Computing)中由Timothy Harris发表的“A PragmaticImplementation of Non-Blocking Linked-Lists”一文中),但是在本发明的实施例中原子运算和标记位不仅用于移除握手,还用于控制哪一线程释放锁定。此外,在之前的无锁定算法中,项目中的链接可被其他线程使用,即使在其从列表中移除之后,且需要复杂的算法(如Harris的“timer snapshots(定时器快照)”)来确定何时可销毁该项目。第二,线程释放由另一线程持有的锁定。第三,加入额外的WaitState Busy,以发信号通知队列节点的拥有者他还不应销毁节点。第四,使用明智的读取和写入的排序。
此外,本发明的实施例设法只为互斥体部分使用单字,还能始终避免读者阻止读者。Krieger等人的方法具有单字的特征,但却面临读者阻止读者的问题。Mellor-Crummey没有读者阻止读者的问题,但互斥体却需要3个字。
尽管在此详细描述的操作是作为顺序流程来描述,但是某些操作事实上可以并行或同时执行。另外,在某些实施例中这些操作的顺序可重新安排。
在此描述的技术不限于任何特定硬件或软件配置;它们可在任何计算或处理环境中有适用性。这些技术可以由硬件、软件或二者的结合来实现。这些技术可用执行可编程机器上的程序实现,所述机器例如是移动或固定计算机、个人数字助理、机顶盒、蜂窝电话和寻呼机以及其他电子装置,每一个包含处理器、处理器可读取的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一输入装置、以及一个或多个输出装置。程序代码应用于使用所述输入装置输入的数据以执行所描述的功能和产生输出信息。所述输出信息可施加于一个或多个输出装置。本领域普通技术人员会理解,本发明可用多种计算机系统配置实作,包括多处理器系统、小型机、中型机等等,只要它们具有共享存储器并支持如表III所描述的原子运算。本发明还可于分布式计算环境中实作,其中任务可由通过通信网络连结的远程处理装置来执行。
可用高级程序或面向对象编程语言执行每一程序以与处理系统交互。然而如果需要,可用汇编或机器语言执行程序。在任何情况下,语言可被编译或翻译。
可使用程序指令来促使用这些指令编程的通用或专用处理系统来执行在此描述的操作。作为替代,可用包含用于执行这些操作的硬件化逻辑的特定硬件组件,或编程计算机组件和定制硬件组件的结合来执行这些操作。在此描述的方法可作为计算机程序产品提供,此产品可包括机器可访问介质,其上储存可用于对处理系统或其他电子装置编程以执行这些方法的指令。在此使用的术语“机器可访问介质”应包括任何能够储存或编码一系列用于机器执行并导致该机器执行在此描述的方法任意之一的介质。术语“机器可访问介质”应相应地包括,但不限于,固态储存器、光或磁盘、以及编码数据信号的载波。而且,在本领域中通常以一种或另一种形式(例如程序、进程、流程、应用程序、模块、逻辑等等)提及软件发出一动作或产生一结果。这些表述仅仅是陈述软件被处理系统执行而导致处理器执行产生一结果的动作的简单表述方法。

Claims (18)

1.一种实现公平可缩放的读者写者互斥以便对临界段进行访问的计算机实现方法,所述方法包括:
为在处理器上执行的多个处理线程的第一线程创建第一队列节点,所述第一队列节点表示所述第一线程访问所述临界段的请求;
将队列中的至少一个指针设置为指向所述第一队列节点,所述队列表示期望访问所述临界段的至少一个线程列表,所述第一队列节点被添加至所述队列的尾部;
等待直到条件符合,所述条件包括:所述第一队列节点由所述队列上的至少一个先前队列节点指示所述第一队列节点没有在前的写入请求;
响应于条件符合,允许所述第一线程进入所述临界段;以及
使所述第一线程释放旋转锁定,所述旋转锁定由所述多个处理线程的第二线程所获得。
2.如权利要求1所述的方法,其特征在于,作为读者的线程绝不阻止作为读者的另一线程。
3.如权利要求1所述的方法,其特征在于,还包括:
当第二队列节点已被所述多个处理线程的第三线程删除时,阻止所述第一线程引用所述第二队列节点的尝试。
4.如权利要求1所述的方法,其特征在于,当一读者线程将一队列节点部分地链接入所述队列之后且同时它的前一线程正试图获得所述临界段的读者写者互斥体上的锁定时,所述读者线程使得所述前一线程等待直到所述读者线程完成将所述队列节点链接入所述队列。
5.如权利要求1所述的方法,其特征在于,每一队列节点包括多个等待状态之一,且所述多个等待状态之一包含Busy状态,所述Busy状态指示一队列节点还不能被删除。
6.如权利要求1所述的方法,其特征在于,每一队列节点包括多个节点状态之一,且线程之间的节点状态的通知是由原子运算来完成的。
7.如权利要求6所述的方法,其特征在于,所述节点状态之一包括UnblockNext状态,所述UnblockNext状态允许后续线程发信号通知所述后续线程还只是部分地链接了所述后续线程的队列节点。
8.如权利要求1所述的方法,其特征在于,将队列中的至少一个指针设置为指向所述第一队列节点包括使用CompareAndSwap来将所述队列的尾部从空指针切换为指向所述第一队列节点。
9.如权利要求1所述的方法,其特征在于,所述队列上的每一队列节点是读者节点和写者节点中的一个。
10.一种用于实现公平可缩放的读者写者互斥体以便对临界段进行访问的装置,所述装置包括:
用于为在处理器上执行的多个处理线程的第一线程创建第一队列节点的装置,所述第一队列节点表示由所述第一线程访问所述临界段的请求;
用于将队列中的至少一个指针设置为指向所述第一队列节点的装置,所述队列表示期望访问所述临界段的至少一个线程列表,所述第一队列节点被添加至所述队列的尾部;
用于等待直到条件符合的装置,所述条件包括:所述第一队列节点由所述队列上的至少一个先前队列节点指示所述第一队列节点没有在前的写入请求;
用于响应于条件符合,允许所述第一线程进入所述临界段的装置;以及
用于使所述第一线程释放旋转锁定的装置,所述旋转锁定由所述多个处理线程的第二线程所获得。
11.如权利要求10所述的装置,其特征在于,作为读者的线程绝不阻止作为读者的另一线程。
12.如权利要求10所述的装置,其特征在于,还包括:
用于在第二队列节点已被所述多个处理线程的第三线程删除时阻止所述第一线程引用所述第二队列节点的尝试的装置。
13.如权利要求10所述的装置,其特征在于,当一读者线程将一队列节点部分地链接入所述队列之后且同时它的前一线程正试图获得所述临界段的读者写者互斥体上的锁定时,所述读者线程使得所述前一线程等待直到所述读者线程完成将所述队列节点连接入所述队列。
14.如权利要求10所述的装置,其特征在于,每一队列节点包括多个等待状态之一,且所述多个等待状态之一包含Busy状态,所述Busy状态指示一队列节点还不能被删除。
15.如权利要求10所述的装置,其特征在于,每一队列节点包括多个节点状态之一,且线程之间的节点状态的通知是由原子运算来完成的。
16.如权利要求15所述的装置,其特征在于,所述节点状态之一包括UnblockNext状态,所述UnblockNext状态允许后续线程发信号通知所述后续线程还只是部分地链接了所述后续线程的队列节点。
17.如权利要求10所述的装置,其特征在于,将队列中的至少一个指针设置为指向所述第一队列节点包括使用CompareAndSwap来将所述队列的尾部从空指针切换为指向所述第一队列节点。
18.如权利要求10所述的装置,其特征在于,所述队列上的每一队列节点是读者节点和写者节点中的一个。
CN201210319993.XA 2005-08-30 2006-08-03 实现公平可缩放的读者写者互斥的方法和装置 Active CN102880518B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/215,863 2005-08-30
US11/215,863 US7730491B2 (en) 2005-08-30 2005-08-30 Fair scalable reader-writer mutual exclusion

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN2006800314727A Division CN101253482B (zh) 2005-08-30 2006-08-03 实现公平可缩放的读者写者互斥的方法和装置

Publications (2)

Publication Number Publication Date
CN102880518A true CN102880518A (zh) 2013-01-16
CN102880518B CN102880518B (zh) 2015-04-22

Family

ID=37310844

Family Applications (2)

Application Number Title Priority Date Filing Date
CN2006800314727A Active CN101253482B (zh) 2005-08-30 2006-08-03 实现公平可缩放的读者写者互斥的方法和装置
CN201210319993.XA Active CN102880518B (zh) 2005-08-30 2006-08-03 实现公平可缩放的读者写者互斥的方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN2006800314727A Active CN101253482B (zh) 2005-08-30 2006-08-03 实现公平可缩放的读者写者互斥的方法和装置

Country Status (4)

Country Link
US (3) US7730491B2 (zh)
EP (1) EP1920332B1 (zh)
CN (2) CN101253482B (zh)
WO (1) WO2007027365A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105765547A (zh) * 2013-10-25 2016-07-13 超威半导体公司 用于执行总线锁定和转译后备缓冲器失效的方法和装置
CN112306698A (zh) * 2019-07-29 2021-02-02 华为技术有限公司 一种numa系统中的临界区执行方法及装置

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7730491B2 (en) * 2005-08-30 2010-06-01 Intel Corporation Fair scalable reader-writer mutual exclusion
US20070136289A1 (en) * 2005-12-14 2007-06-14 Intel Corporation Lock elision with transactional memory
US8028296B2 (en) * 2006-03-31 2011-09-27 Microsoft Corporation Providing a wrapper around native synchronization objects
US8880853B2 (en) 2008-02-01 2014-11-04 International Business Machines Corporation CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock
US8316218B2 (en) * 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8171476B2 (en) 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8788795B2 (en) * 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8640141B2 (en) * 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8452947B2 (en) * 2008-02-01 2013-05-28 International Business Machines Corporation Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms
US8516484B2 (en) 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8225120B2 (en) 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8015379B2 (en) * 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8250396B2 (en) * 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8145849B2 (en) * 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8612977B2 (en) * 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8386822B2 (en) * 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8495642B2 (en) * 2008-04-23 2013-07-23 Red Hat, Inc. Mechanism for priority inheritance for read/write locks
US8266394B2 (en) * 2008-07-14 2012-09-11 International Business Machines Corporation Methods for single-owner multi-consumer work queues for repeatable tasks
US8145723B2 (en) * 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8082315B2 (en) * 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US8230201B2 (en) * 2009-04-16 2012-07-24 International Business Machines Corporation Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system
US8145817B2 (en) * 2009-04-28 2012-03-27 Microsoft Corporation Reader/writer lock with reduced cache contention
JP4385387B1 (ja) * 2009-07-02 2009-12-16 修平 西山 属性付きキー・バリュー・ストアによるデータベース・システム
US8510738B2 (en) 2009-08-20 2013-08-13 Microsoft Corporation Preventing unnecessary context switching by employing an indicator associated with a lock on a resource
US8943502B2 (en) * 2010-03-15 2015-01-27 International Business Machines Corporation Retooling lock interfaces for using a dual mode reader writer lock
US9652301B2 (en) * 2010-09-15 2017-05-16 Wisconsin Alumni Research Foundation System and method providing run-time parallelization of computer software using data associated tokens
US8949566B2 (en) * 2010-12-02 2015-02-03 International Business Machines Corporation Locking access to data storage shared by a plurality of compute nodes
CN102141932B (zh) * 2010-12-14 2012-11-14 清华大学 大临界区保护方法
US8943510B2 (en) * 2010-12-17 2015-01-27 Microsoft Corporation Mutual-exclusion algorithms resilient to transient memory faults
US8527712B2 (en) 2011-05-13 2013-09-03 Oracle International Corporation Request to own chaining in multi-socketed systems
US20130007322A1 (en) * 2011-06-29 2013-01-03 International Business Machines Corporation Hardware Enabled Lock Mediation
US9069566B1 (en) * 2012-02-22 2015-06-30 Hudku Technosoft Private Limited Implementation of a multiple writer single reader queue in a lock free and a contention free manner
KR20130118593A (ko) * 2012-04-20 2013-10-30 한국전자통신연구원 데이터 분산 서비스를 위한 미들웨어에서 데이터를 처리하기 위한 장치 및 방법
CN102662747A (zh) * 2012-04-23 2012-09-12 深圳市融创天下科技股份有限公司 一种线程访问临界区的方法、系统和终端设备
CN102929711B (zh) * 2012-09-24 2016-08-10 浙江大学 一种软件实时事务内存的实现方法
US9342380B2 (en) 2013-03-05 2016-05-17 Oracle International Corporation System and method for implementing reader-writer locks using hardware transactional memory
US9329895B2 (en) 2014-01-22 2016-05-03 International Business Machines Corporation Reader-writer lock
US9477521B2 (en) 2014-05-29 2016-10-25 Netapp, Inc. Method and system for scheduling repetitive tasks in O(1)
US9304702B2 (en) 2014-05-29 2016-04-05 Netapp, Inc. System and method for parallelized performance data collection in a computing system
US9256477B2 (en) * 2014-05-29 2016-02-09 Netapp, Inc. Lockless waterfall thread communication
CN105512052B (zh) * 2014-10-20 2019-01-01 伊姆西公司 用于处理输入输出操作请求的方法和装置
US9853908B2 (en) 2014-11-25 2017-12-26 Red Hat Inc. Utilizing access control data structures for sharing computing resources
US9798585B2 (en) * 2015-05-19 2017-10-24 Oracle International Corporation Context switching with reader-writer locks
US10445096B2 (en) 2017-04-05 2019-10-15 Cavium, Llc Managing lock and unlock operations using traffic prioritization
US10331500B2 (en) 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization
CN108768884A (zh) * 2018-04-27 2018-11-06 江苏中科芯核电子科技有限公司 一种基于环形缓冲区的无线通信数据处理方法
WO2019212182A1 (en) * 2018-05-04 2019-11-07 Samsung Electronics Co., Ltd. Apparatus and method for managing a shareable resource in a multi-core processor
CN109558241A (zh) * 2018-11-13 2019-04-02 锐捷网络股份有限公司 一种获取自旋锁的方法及装置
US11334627B2 (en) * 2019-07-12 2022-05-17 Arm Limited Data processing
US20220197720A1 (en) * 2020-12-18 2022-06-23 Micro Focus Llc Execution of a synchronous operation in an asynchronous operational environment
CN117171102B (zh) * 2023-09-07 2024-01-26 山东九州信泰信息科技股份有限公司 一种多线程无锁高速写文件的方法

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987496A (en) * 1996-12-03 1999-11-16 Mitsubishi Electric Information Technology Center America, Inc. (Ita) Real-time channel-based reflective memory
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6237019B1 (en) 1998-03-18 2001-05-22 International Business Machines Corporation Method and apparatus for performing a semaphore operation
US6112222A (en) * 1998-08-25 2000-08-29 International Business Machines Corporation Method for resource lock/unlock capability in multithreaded computer environment
US6341302B1 (en) * 1998-09-24 2002-01-22 Compaq Information Technologies Group, Lp Efficient inter-task queue protocol
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6480918B1 (en) * 1998-12-22 2002-11-12 International Business Machines Corporation Lingering locks with fairness control for multi-node computer systems
US6546443B1 (en) * 1999-12-15 2003-04-08 Microsoft Corporation Concurrency-safe reader-writer lock with time out support
US6823511B1 (en) * 2000-01-10 2004-11-23 International Business Machines Corporation Reader-writer lock for multiprocessor systems
US6684398B2 (en) * 2000-05-31 2004-01-27 Sun Microsystems, Inc. Monitor entry and exit for a speculative thread during space and time dimensional execution
US6934950B1 (en) * 2000-06-06 2005-08-23 International Business Machines Corporation Thread dispatcher for multi-threaded communication library
US7234139B1 (en) * 2000-11-24 2007-06-19 Catharon Productions, Inc. Computer multi-tasking via virtual threading using an interpreter
US7430627B2 (en) * 2000-12-19 2008-09-30 International Business Machines Corporation Adaptive reader-writer lock
GB0118294D0 (en) * 2001-07-27 2001-09-19 Ibm Method and system for deadlock detection and avoidance
US6965961B1 (en) * 2002-03-01 2005-11-15 University Of Rochester Queue-based spin lock with timeout
US20030200457A1 (en) * 2002-04-23 2003-10-23 International Business Machines Corporation Enhancement to the MCS lock for increased functionality and improved programmability
CN1212569C (zh) * 2002-11-01 2005-07-27 英业达股份有限公司 多线程自动测试方法
US20040185845A1 (en) * 2003-02-28 2004-09-23 Microsoft Corporation Access point to access point range extension
US7200695B2 (en) * 2003-09-15 2007-04-03 Intel Corporation Method, system, and program for processing packets utilizing descriptors
US7493618B2 (en) * 2003-09-19 2009-02-17 International Business Machines Corporation Fault tolerant mutual exclusion locks for shared memory systems
US7260735B2 (en) * 2003-12-18 2007-08-21 Lsi Corporation Method and system for maintaining a running count of events updated by two asynchronous processes
US7770172B2 (en) * 2004-09-01 2010-08-03 Microsoft Corporation Conditional variables without spinlocks
US7844973B1 (en) * 2004-12-09 2010-11-30 Oracle America, Inc. Methods and apparatus providing non-blocking access to a resource
US20060143511A1 (en) * 2004-12-29 2006-06-29 Huemiller Louis D Jr Memory mapped spin lock controller
US7797704B2 (en) * 2005-03-30 2010-09-14 Hewlett-Packard Development Company, L.P. System and method for performing work by one of plural threads using a lockable resource
US20070044103A1 (en) * 2005-07-25 2007-02-22 Mark Rosenbluth Inter-thread communication of lock protected data
US7730491B2 (en) 2005-08-30 2010-06-01 Intel Corporation Fair scalable reader-writer mutual exclusion
US7962923B2 (en) * 2005-12-30 2011-06-14 Level 3 Communications, Llc System and method for generating a lock-free dual queue

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105765547A (zh) * 2013-10-25 2016-07-13 超威半导体公司 用于执行总线锁定和转译后备缓冲器失效的方法和装置
CN112306698A (zh) * 2019-07-29 2021-02-02 华为技术有限公司 一种numa系统中的临界区执行方法及装置

Also Published As

Publication number Publication date
EP1920332B1 (en) 2016-10-05
US8707324B2 (en) 2014-04-22
CN101253482A (zh) 2008-08-27
US20070067774A1 (en) 2007-03-22
WO2007027365A1 (en) 2007-03-08
US20100293553A1 (en) 2010-11-18
US8127303B2 (en) 2012-02-28
US7730491B2 (en) 2010-06-01
EP1920332A1 (en) 2008-05-14
CN101253482B (zh) 2012-11-14
US20120198471A1 (en) 2012-08-02
CN102880518B (zh) 2015-04-22

Similar Documents

Publication Publication Date Title
CN101253482B (zh) 实现公平可缩放的读者写者互斥的方法和装置
CN100407136C (zh) 使用睡眠-唤醒机制来执行指令的方法和装置
US8819684B2 (en) Synchronizing multiple threads efficiently
US6754859B2 (en) Computer processor read/alter/rewrite optimization cache invalidate signals
CN101739298B (zh) 共享缓存管理方法和系统
CN101286123B (zh) 用于高效地执行事务的装置、方法和系统
CN100481012C (zh) 数据库ram高速缓冲存储器
US9400818B2 (en) Highly scalable tree-based trylock
CN1289962A (zh) 在多线程计算环境中建立跨越多个进程的通信程序
US20020029239A1 (en) Method and system for enhanced concurrency in a computing environment
CN1908890B (zh) 用于使用记录板机制处理加载锁定指令的方法和装置
McKenney Selecting locking primitives for parallel programming
Cypher The communication requirements of mutual exclusion
US6976260B1 (en) Method and apparatus for serializing a message queue in a multiprocessing environment
CN101135995A (zh) 用于从别名地址池中移除别名地址的方法和设备
Liu et al. Lock-free scheduling of logical processes in parallel simulation
David et al. A secure two phase locking protocol
CN106844242B (zh) 一种数据交换方法和系统
WO2005070053A2 (en) A method, system and software for replacing a module
Jin et al. Shared memory parallelization of decision tree construction using a general data mining middleware
Demeure et al. A scheduling framework for the automatic support of temporal QoS constraints
Galeos et al. Pimp my taxi ride
Campbell Holding onto things in a multiprocessor world
Tripkovic et al. WILL ACTIVE OBJECT DATABASES
Goodman Philip J. Woest Computer Sciences Technical Report ii814 January 1989

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant