專利名稱:阻塞局部意義同步屏障的制作方法
阻塞局部意義同步屏障
本專利文獻(xiàn)的公開的一部分包含受到版權(quán)保護(hù)的材料。版權(quán)所有人不反對(duì)任 何人對(duì)該專利文獻(xiàn)或?qū)@_內(nèi)容進(jìn)行復(fù)制,按照其在(美國)專利和商標(biāo)局的專利 文件或記錄中的形式,但版權(quán)所有人保留其它所有的權(quán)利。應(yīng)對(duì)本文獻(xiàn)應(yīng)用以下通
知Copyright 2005, Microsoft Corp。
背景
同步屏障是用于并行計(jì)算中的原語,允許程序員保證在允許任何線程開始下 一階段之前所有的線程都已經(jīng)完成了它們一個(gè)階段的工作。同步屏障實(shí)現(xiàn)帶有沒有 線程會(huì)在所有線程均進(jìn)入調(diào)用之前從該調(diào)用返回的特性的功能。為了說明,考慮以 下示例,其中程序員令若干線程運(yùn)行同一代碼,均處理Workl()(工作l()),而 不想要任何線程在所有線程均完成了 Workl()之前開始Work2()。使用屏障,代碼 如下
Workl(); Barrier(); Work2();
此處,隨著線程到達(dá)Barrier()(屏障())調(diào)用,它們暫停(自旋(spinning)或 者阻塞)直到所有線程均到達(dá),此時(shí)所有線程被釋放來進(jìn)行Work2()。注意到,同 步屏障應(yīng)可被重用每一線程都必須可能在完成Work2()之后對(duì)同一結(jié)構(gòu)再次調(diào)用 Barrier()。
這些原語通常用于科學(xué)和數(shù)學(xué)計(jì)算和其他高度并行的工作負(fù)荷。在其中不存 在同步屏障原語的系統(tǒng)中,需要該功能性的開發(fā)員必須實(shí)現(xiàn)他們自己的屏障。這導(dǎo) 致重復(fù)的工作,有時(shí)會(huì)導(dǎo)致不正確的代碼。此外,這是可通過建立同步屏障來添加 值的區(qū)域,通過高效地處理屏障的刪除,這不僅快速且更好地支持真實(shí)世界的使用。就此而言,需要用較快實(shí)現(xiàn)來替換現(xiàn)有屏障并用對(duì)阻塞和刪除的支持來支持 高性能同步屏障的需求的快速且健壯的原語。
概述
提供該概述以便以簡化形式介紹將在以下在詳細(xì)描述中進(jìn)一步描述的概念的 選集。該概述不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或基本特征,它也不旨在被 用于幫助確定所要求保護(hù)的主題的范圍。
考慮本領(lǐng)域的上述缺點(diǎn)時(shí),提供阻塞局部意義同步屏障。對(duì)若干實(shí)施例,經(jīng) 由通過同步屏障方法實(shí)現(xiàn)的同步屏障以同步軟件線程是部分通過使用同步屏障方 法局部的變量來實(shí)現(xiàn),該變量將在同步屏障方法內(nèi)改變,并被檢查以確定應(yīng)在何時(shí) 釋放軟件線程。而且,通過確保線程在同步屏障方法中執(zhí)行的最后一個(gè)操作是寫來 提供屏障的安全刪除以確保屏障的安全刪除。這是通過維護(hù)對(duì)己經(jīng)離開同步屏障的 變量的計(jì)數(shù)而完成的。
通過使用確定是否有線程正阻塞的指示、由到達(dá)屏障的最后一個(gè)線程對(duì)之前 事件的復(fù)位、通過檢查該指示來確定是否由到達(dá)屏障的最后一個(gè)線程對(duì)當(dāng)前事件置 位、釋放等待最后一個(gè)線程來到達(dá)屏障的自旋線程來支持線程阻塞。最后,如果通 過對(duì)指示的檢查如此指示,則由到達(dá)屏障的最后一個(gè)線程對(duì)當(dāng)前事件置位以釋放在 等待最后一個(gè)線程到達(dá)的同時(shí)正阻塞的線程。本發(fā)明的其他優(yōu)點(diǎn)和特征將在以下描 述。
附圖簡述
參考附圖來進(jìn)一步描述阻塞局部意義屏障,附圖中
圖1是示出線程在各個(gè)時(shí)刻到達(dá)和離開同步屏障的圖示;
圖2是示出根據(jù)意義反轉(zhuǎn)集中屏障的進(jìn)程的流程圖3是示出根據(jù)支持屏障的安全刪除的局部意義同步屏障的進(jìn)程的流程圖; 圖4是示出根據(jù)阻塞同步屏障的進(jìn)程的流程圖5是示出根據(jù)進(jìn)一步優(yōu)化的圖4的阻塞同步屏障的進(jìn)程的流程圖; 圖6是表示適于結(jié)合實(shí)現(xiàn)圖1到5的同步屏障進(jìn)程來使用的示例性計(jì)算設(shè)備 的框圖;以及
圖7示出了可在其中實(shí)現(xiàn)眾多計(jì)算機(jī)化進(jìn)程以執(zhí)行圖1到5的同步屏障進(jìn)程
的示例性聯(lián)網(wǎng)計(jì)算環(huán)境。
6詳細(xì)描述
在以下描述和附圖中描述了某些特定細(xì)節(jié),以提供對(duì)本發(fā)明的各個(gè)實(shí)施例的 徹底理解,通常與計(jì)算和軟件技術(shù)相關(guān)聯(lián)的某些公知細(xì)節(jié)將不在以下公開中描述, 來避免對(duì)本發(fā)明的各實(shí)施例的不必要的混淆。而且,相關(guān)領(lǐng)域的普通技術(shù)人員可以 理解,他們可以無需以下描述的細(xì)節(jié)中的一個(gè)或多個(gè)而實(shí)現(xiàn)本發(fā)明的其它實(shí)施例。 最后,盡管在以下公開中是關(guān)于步驟和序列描述各個(gè)方法的,但是如此的描述是用 于提供本發(fā)明的實(shí)施例的清楚的實(shí)現(xiàn),且步驟以及步驟的序列不應(yīng)被認(rèn)為是實(shí)現(xiàn)本 發(fā)明所必需的。
參考圖1,顯示了示出線程在各個(gè)時(shí)刻到達(dá)和離開同步屏障的概念的圖示。在
時(shí)間線5示出同步屏障(屏障)7以及第一線程9、第二線程11和第三線程13。
該圖示僅是圖形上闡述在屏障上發(fā)生了什么的示例,因此諸如線程數(shù)目以及時(shí)間間 隔的項(xiàng)目不是按比例的且可廣泛變化。
在Tl ,第一線程9已到達(dá)屏障7并在屏障7處等待或自旋直到所有其他線程 均已到達(dá)。在T2,示出第二線程11將要到達(dá),同時(shí)第一線程9仍在屏障7處等待。 在T3,第一線程9和第二線程11均為示出在等待,同時(shí)第三線程13將要到達(dá)。 在T4,所有三個(gè)線程9、 11、 13均已到達(dá)屏障7。此時(shí),所有三個(gè)線程9、 11和 13均被釋放,因?yàn)樗械木€程都已到達(dá)屏障7。在T5,所有三個(gè)線程均已剛離開 屏障7。
在驅(qū)動(dòng)以下同步屏障示例的設(shè)計(jì)時(shí)作出了兩個(gè)原理假設(shè)。首先,假定屏障結(jié) 構(gòu)本身的大小(即字節(jié)數(shù)目)不是重要的。與鎖不同,屏障一般不被嵌入在其他結(jié) 構(gòu)中。第二,要優(yōu)化的使用場(chǎng)景為(1)每個(gè)處理器的單個(gè)線程以及(2)所有線程 在大致相同時(shí)間到達(dá)屏障。該假設(shè)突出了所認(rèn)為的屏障的最佳使用模式。帶有每處 理器一個(gè)以上線程的調(diào)用程序?qū)⒃诰€程每次在屏障處集合時(shí)采取上下文交換。如果 線程大致在同時(shí)到達(dá)屏障,則同步開支將很小。相反,如果線程在集合點(diǎn)之間有顯 著不同的工作量要做并因此在其到達(dá)之間具有較大間隔,則首先到達(dá)的線程將或者 長時(shí)間自旋(浪費(fèi)工作)或阻塞(采取上下文交換)。該原語應(yīng)支持次佳的使用模 式,但應(yīng)為最佳使用模式進(jìn)行優(yōu)化。
參考圖2,顯示了示出根據(jù)為背景提供的已知的意義反轉(zhuǎn)集中屏障的進(jìn)程的流 程圖。圖2的進(jìn)程伴隨用于意義反轉(zhuǎn)集中屏障的以下算法(它假定每個(gè)處理器單個(gè) 線程)。shared count : Integer := P shared sense : Boolean := true
processor private local—sense : Boolean := true
procedure central,barrier
local—sense : = not local—sense //每一處理器切換其自己的意義 工f fetch—and—decrement (&count) = 1 count := P
sense := local—sense
//最后一個(gè)處理器切換全局意義
si ss
repeat until sense = local—sense
以上及在圖2中示出的屏障使用全局計(jì)數(shù)變量來存儲(chǔ)尚未到達(dá)屏障的線程數(shù) 目,并使用意義位,該意義位在每個(gè)集合點(diǎn)一用信號(hào)通知所有線程均以到達(dá)時(shí)就被 切換并且可以繼續(xù)。線程存儲(chǔ)它們自己的局部意義變量。到達(dá)線程15切換其局部
意義位n,然后遞減計(jì)數(shù)i9。作出查明當(dāng)前到達(dá)的線程是否是要到達(dá)的最后一個(gè)
線程的判斷21。如果它是要到達(dá)的最后一個(gè)線程23,則它對(duì)計(jì)數(shù)復(fù)位并切換全局 意義位27以釋放自旋線程。如果線程不是要到達(dá)的最后線程29,則它自旋等待以 被釋放31。
上述進(jìn)程改善了在以往工作中所述的需要兩個(gè)自旋和兩個(gè)互鎖操作的屏障。 該屏障僅需要單個(gè)自旋和單個(gè)互鎖的遞減("fetch一and一decrement(取并遞減)")。
然而,從API設(shè)計(jì)立場(chǎng),該屏障是成問題的,因?yàn)樗竺恳痪€程/處理器跨 多個(gè)調(diào)用來維護(hù)其自身的local一sense (局部意義)變量。為了設(shè)計(jì)用于此的API, 例如可在PRCB (對(duì)內(nèi)核屏障)或TEB (對(duì)用戶模式屏障)中存儲(chǔ)local—sense,或 者使函數(shù)返回局部意義變量并要求調(diào)用程序存儲(chǔ)該值直到下個(gè)集合點(diǎn)。在任一情況 中,這會(huì)使API復(fù)雜化。然而,進(jìn)一步分析示出這是不必要的。屏障的意義位僅 在最后一個(gè)線程到達(dá)屏障并反轉(zhuǎn)該位以釋放自旋線程時(shí)改變。這一特性使得 local sense成為局部變量。在以下代碼中示出同步屏障中這一方面的實(shí)現(xiàn)的示例。#define SENSE—BIT 0x80000000 typedef struct —BARRIER { ULONG Barrier,.
ULONG TotalProcessors/ 〃等效于以上的P } BARRIER, *PBARRIER/
LOGICAL Barrier (PBARRIER Barrier)
ULONG LocalSense, CapturedValue;
CapturedValue = InterlockedDecrement(
&Barrie;r — 〉Ba:r;rier),' LocalSense =(( CapturedValue) & SENSE—BIT),' if ((CapturedValue & (~SENSE—BIT)) == 0) { Barrier —>Bar;rier =
IjOcalSense | Barrier —〉TotalProcessors ,' return TRUE,'
while ((Barrier-〉Barrier & SENSE—BIT) != LocalSense) return FALSE/
以上示例將意義和計(jì)數(shù)變量聯(lián)合到屏障內(nèi),使得屏障的高位為意義,低31位 為計(jì)數(shù)。這是可能的,因?yàn)榫€程id為24位,因此在屏障上不能有多于224個(gè)線程 在等待。然而,以上是Microsoft Windows⑧操作系統(tǒng)專用的,且可能在不同的操作 系統(tǒng)(OS)中變化。線程的數(shù)目一般比指針大小小至少2x (所以在64位機(jī)器上, 最多可有263個(gè)線程),因?yàn)槊恳痪€程必須具有與之相關(guān)聯(lián)的用于堆棧、寄存器空 間等的某些存儲(chǔ)空間量。因此,在其他OS和體系結(jié)構(gòu)上,將存在可用作意義位的 空閑位。以上示例給出了局部意義屏障的性能優(yōu)點(diǎn),而不必跨多個(gè)調(diào)用存儲(chǔ)每個(gè)線程的局部意義位。
而且,注意到已為返回值添加了平局破壞器(tiebreaker)。 一個(gè)線程的調(diào)用 將返回TRUE (真),而其余將返回FALSE (假)。這有時(shí)由調(diào)用程序用來選擇 一個(gè)線程執(zhí)行必須進(jìn)行正好一次的某些附加工作。
接著參考圖3,顯示了示出根據(jù)支持屏障的安全刪除的局部意義同步屏障的進(jìn) 程的流程圖。支持刪除語義是其中可為顧客添加超出僅僅性能的其他價(jià)值的領(lǐng)域。 提供這樣的支持可能變得困難的一個(gè)原因在于,在回收屏障之前需要知道所有線程 均已離開該屏障。使用以上屏障示例,這是不可能的,因?yàn)椴荒軐⒁央x開屏障的線 程與先占同時(shí)在Barrier》Barrier上自旋的線程區(qū)分開。如果線程在其自旋期間被 掛起,且在它獲得運(yùn)行的機(jī)會(huì)之前屏障被回收,則當(dāng)其喚醒并試圖檢查 Barrier-〉Barrier的值時(shí),存儲(chǔ)器可能被釋放并用于其它,因此訪問存儲(chǔ)器可能是不 安全的。在嚴(yán)格遵循POSIX和其它已知實(shí)現(xiàn)中,如果在線程仍在屏障中時(shí)調(diào)用刪 除,則結(jié)果是未定義的。這迫使開發(fā)員使用屏障周圍的某些包裝同步以便于了解線 程何時(shí)離開了屏障以及何時(shí)刪除是安全的。
為了支持屏障的安全刪除,進(jìn)程確信線程在屏障上執(zhí)行的最后一個(gè)操作為寫。 如果最后一個(gè)操作為讀,則如以上代碼中,不存在對(duì)線程何時(shí)離開屏障的指示。為 了使屏障上的最后一個(gè)操作為寫,修改以上進(jìn)程。使用TotalProcessors (總處理器) 字段來作為已離開屏障的線程的計(jì)數(shù)。當(dāng)線程到達(dá)屏障33之后,如果它是要到達(dá) 的最后一個(gè)線程35,則它在釋放其它線程39之前將TotalProcessors字段設(shè)為1 37。 然后作出該線程是否是最后一個(gè)離開的線程的判斷41。如果該線程不是最后一個(gè) 離開的線程43,則它在返回之前遞增TotalProcessors字段45。如果該線程是最后 一個(gè)離開的線程47,則復(fù)位TotalProcessors字段49。當(dāng)其它線程被釋放39時(shí),確 定每一個(gè)線程是否是最后一個(gè)離開的線程41,且如上相應(yīng)地遞增TotalProcessors 字段45。
TotalProcessors因此扮演雙重角色,既存儲(chǔ)加入屏障的線程的總數(shù)又對(duì)在集合 之后離開屏障的線程的數(shù)目計(jì)數(shù)。TotalProcessors可用于兩者,是因?yàn)閮H在最后一 個(gè)線程對(duì)計(jì)數(shù)復(fù)位時(shí)才需要線程的數(shù)目。由于它是到達(dá)屏障的最后一個(gè)線程,所有 其它線程都必定離開了之前的集合點(diǎn)(因?yàn)樗鼈円呀?jīng)到達(dá)當(dāng)前集合點(diǎn)),因此它們 各自必定已經(jīng)使計(jì)數(shù)遞增。當(dāng)最后一個(gè)線程到達(dá)時(shí),TotalProcessors已由每一線程 遞增一次,因此存儲(chǔ)了屏障上的線程總數(shù)。
注意到,順序?qū)Φ竭_(dá)的最后一個(gè)線程的重要的 一旦意義位被切換,其它線
10程能夠離開屏障39,且切換線程可被換出,因此有必要確保Barrier->TotalProcessors 在釋放其它線程之前被適當(dāng)設(shè)置?,F(xiàn)在實(shí)現(xiàn)DeleteBarrier (刪除屏障)調(diào)用是安全 的,因?yàn)橐坏㏕otalProcessors遞增回P,這指示所有線程均已離開屏障,因此它可 被回收。
接著參考圖4,顯示了示出根據(jù)阻塞同步屏障的進(jìn)程的流程圖。該流程圖示出 作為上述局部意義屏障的擴(kuò)展的進(jìn)程。通知事件被添加到上述屏障結(jié)構(gòu)。"通知事 件"是Microsoft Windows⑧操作系統(tǒng)專用術(shù)語,但類此的原語在其它平臺(tái)上可用, 因此也可用于實(shí)現(xiàn)如此處所述的同步屏障。
添加阻塞的一個(gè)問題在于,它向每個(gè)集合點(diǎn)添加了兩個(gè)內(nèi)核調(diào)用。這在其中 調(diào)用程序根據(jù)之前假設(shè)已正確使用了屏障的情況中尤其麻煩。所有線程均在自旋而 沒有一個(gè)被阻塞,而調(diào)用程序則支付了它們并未使用的阻塞支持的成本。該成本在 僅自旋情況中通過使用確定是否有線程阻塞的指示來移除。
當(dāng)線程到達(dá)51之后,確定它是否是要到達(dá)的最后一個(gè)線程53。如果它是要到 達(dá)的最后一個(gè)線程55,則它對(duì)之前事件復(fù)位57,并對(duì)屏障結(jié)構(gòu)中的TotalProcessors 和Barrier變量置位以釋放自旋等待線程59。然后確定是否有線程正阻塞的指示是 否被置位(如下所述由之前線程置位)61。如果是,則當(dāng)前事件被置位以釋放所有 阻塞的等待線程65。如果否,則當(dāng)前事件不被置位來釋放所有阻塞的等待線程69。
如果線程不是要到達(dá)的最后一個(gè)線程71,則線程自旋某一時(shí)間間隔,等待最 后一個(gè)線程到達(dá)73,然后當(dāng)它們決定阻塞75時(shí),它們檢査是否有線程正阻塞的指 示是否被置位77。如果是否有線程正阻塞的指示尚未被置位79,則它們對(duì)指示置 位81以指示要到達(dá)的最后一個(gè)線程必須對(duì)事件置位65。否則,指示不被置位83。 阻塞線程然后回過來看意義位85,如果它仍未切換87,則在事件上等待89。如果 意義位被切換91,則線程被釋放93。如上所述,要到達(dá)的最后一個(gè)線程55切換意 義位59,并檢查是否有線程正阻塞的指示是否被置位61,如果指示已被置位65 則對(duì)事件置位65。使用該進(jìn)程,使內(nèi)核僅在線程正阻塞時(shí)置位/復(fù)位事件,而不會(huì) 減慢自旋情況。
接著參考圖5,示出了根據(jù)進(jìn)一步優(yōu)化的圖4的阻塞同步屏障的進(jìn)程的流程 圖。作為保持阻塞情況以免于使自旋情況膨脹的最終優(yōu)化,不創(chuàng)建是否有線程正阻 塞的指示直到線程需要阻塞。如果線程需要阻塞75,進(jìn)行確定是否有線程正阻塞 的指示是否已被創(chuàng)建的檢查95。如果否97,則創(chuàng)建這樣的指示99。因此,從不阻 塞的調(diào)用程序不必花費(fèi)資源來創(chuàng)建這些不必要的指示。接著參考圖6,示出了表示適于結(jié)合實(shí)現(xiàn)上述進(jìn)程和圖1到5的同步屏障使用 的示例性計(jì)算設(shè)備的框圖。例如,實(shí)現(xiàn)用于同步屏障的過程和方法的計(jì)算機(jī)可執(zhí)行
指令可以駐留和/或運(yùn)行在如圖6中所示的這樣一個(gè)計(jì)算環(huán)境中。計(jì)算系統(tǒng)環(huán)境220 僅是合適的計(jì)算環(huán)境的一個(gè)示例,并不旨在對(duì)本發(fā)明的使用范圍或功能提出任何限 制。也不應(yīng)該把計(jì)算環(huán)境220解釋為對(duì)示例性操作環(huán)境220中示出的任一組件或其 組合有任何依賴性或要求。
本發(fā)明可用眾多其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置來操作。適合在本發(fā)明 中使用的公知的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括,但不限于,個(gè)人計(jì)算機(jī)、 服務(wù)器計(jì)算機(jī)、手持或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、 可編程消費(fèi)者電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)、包含上述系統(tǒng)或設(shè)備中的任 一個(gè)的分布式計(jì)算機(jī)環(huán)境等。
本發(fā)明的各方面可在諸如程序模塊等由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通 用語境中描述。 一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等, 它們執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。本發(fā)明的各方面也可以在分布式計(jì)算 環(huán)境中實(shí)現(xiàn),其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行。在分布式計(jì)算環(huán) 境中,程序模塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì) 中。
用于實(shí)現(xiàn)本發(fā)明各方面的示例性系統(tǒng)包括計(jì)算機(jī)241形式的通用計(jì)算設(shè)備。 計(jì)算機(jī)241的組件可以包括,但不限于,處理單元259、系統(tǒng)存儲(chǔ)器222和將包括 系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合至處理單元259的系統(tǒng)總線221。系統(tǒng)總線221 可以是若干類型的總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總 線和使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。作為示例,而非限制,這樣的 體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增 強(qiáng)的ISA (EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線和外圍部件互 連(PCI)總線(也被稱為附夾板(Mezzanine)總線)。
計(jì)算機(jī)241通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能夠被計(jì) 算機(jī)241訪問的任何可用介質(zhì),且包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng) 介質(zhì)。作為示例,而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。 計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以任何方法或技術(shù)實(shí)現(xiàn)的用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù) 結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。 計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、磁帶盒、磁帶、磁盤存 儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由計(jì)算機(jī)241訪問的任何其 它介質(zhì)。通信介質(zhì)通常具體化為諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中的計(jì) 算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介質(zhì)。術(shù)語
"已調(diào)制數(shù)據(jù)信號(hào)"指的是這樣一種信號(hào),其一個(gè)或多個(gè)特征以在信號(hào)中編碼信息 的方式被設(shè)定或更改。作為示例,而非限制,通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng) 絡(luò)或直接線連接,以及無線介質(zhì),諸如聲學(xué)、RF、紅外線和其它無線介質(zhì)。上述 中任一組合也應(yīng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。
系統(tǒng)存儲(chǔ)器222包括易失性或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì),諸如 只讀存儲(chǔ)器(ROM) 223和隨機(jī)存取存儲(chǔ)器(RAM) 260?;据斎?輸出系統(tǒng)224
(BIOS)包含有助于諸如啟動(dòng)時(shí)在計(jì)算機(jī)241中元件之間傳遞信息的基本例程, 它通常存儲(chǔ)在ROM 223中。RAM 260通常包含處理單元259可以立即訪問和/或 目前正在操作的數(shù)據(jù)和/或程序模塊。作為示例,而非限制,圖6示出了操作系統(tǒng) 225、應(yīng)用程序226、其它程序模塊227和程序數(shù)據(jù)228。
計(jì)算機(jī)241也可以包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介 質(zhì)。僅作為示例,圖6示出了從不可移動(dòng)、非易失性磁介質(zhì)中讀取或向其寫入的硬 盤驅(qū)動(dòng)器238,從可移動(dòng)、非易失性磁盤254中讀取或向其寫入的磁盤驅(qū)動(dòng)器239, 以及從諸如CD ROM或其它光學(xué)介質(zhì)等可移動(dòng)、非易失性光盤253中讀取或向其 寫入的光盤驅(qū)動(dòng)器240??梢栽谑纠圆僮鳝h(huán)境中使用的其它可移動(dòng)/不可移動(dòng)、易 失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,盒式磁帶、閃存卡、數(shù)字多功能 盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器238通常由不可移動(dòng)存 儲(chǔ)器接口,諸如接口 234連接至系統(tǒng)總線221,磁盤驅(qū)動(dòng)器239和光盤驅(qū)動(dòng)器240 通常由可移動(dòng)存儲(chǔ)器接口,諸如接口 235連接至系統(tǒng)總線221。
以上描述和在圖6中示出的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī) 241提供了對(duì)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例如,在 圖6中,硬盤驅(qū)動(dòng)器238被示為存儲(chǔ)操作系統(tǒng)258、應(yīng)用程序257、其它程序模塊 256和程序數(shù)據(jù)255。注意,這些組件可以與操作系統(tǒng)225、應(yīng)用程序226、其它程 序模塊227和程序數(shù)據(jù)228相同或不同。操作系統(tǒng)258、應(yīng)用程序257、其它程序 模塊256和程序數(shù)據(jù)255在這里被標(biāo)注了不同的標(biāo)號(hào)是為了說明至少它們是不同的 副本。用戶可以通過輸入設(shè)備,諸如鍵盤251和定點(diǎn)設(shè)備252 (通常指鼠標(biāo)、跟蹤 球或觸摸墊)向計(jì)算機(jī)241輸入命令和信息。其它輸入設(shè)備(未示出)可以包括麥克風(fēng)、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設(shè)備通常
由耦合至系統(tǒng)總線的用戶輸入接口 236連接至處理單元259,但也可以由其它接口 或總線結(jié)構(gòu),諸如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器242 或其它類型的顯示設(shè)備也經(jīng)由接口,諸如視頻接口 232連接至系統(tǒng)總線221。除監(jiān) 視器以外,計(jì)算機(jī)也可以包括其它外圍輸出設(shè)備,諸如揚(yáng)聲器244和打印機(jī)243, 它們可以通過輸出外圍接口 233連接。
計(jì)算機(jī)241可使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)246的邏輯連 接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)246可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng) 絡(luò)PC、對(duì)等設(shè)備或其它常見網(wǎng)絡(luò)節(jié)點(diǎn),且通常包括上文相對(duì)于計(jì)算機(jī)241描述的 許多或所有元件,盡管在圖6中只示出存儲(chǔ)器存儲(chǔ)設(shè)備247。圖6中所示邏輯連接 包括局域網(wǎng)(LAN) 245和廣域網(wǎng)(WAN) 249,但也可以包括其它網(wǎng)絡(luò)。這樣的 網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)241通過網(wǎng)絡(luò)接口或適配器237連接至 LAN 245。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)241通常包括調(diào)制解調(diào)器250或 用于通過諸如因特網(wǎng)等WAN 249建立通信的其它裝置。調(diào)制解調(diào)器250可以是內(nèi) 置或外置的,它可以通過用戶輸入接口 236或其它合適的機(jī)制連接至系統(tǒng)總線221 。 在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)241所描述的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程存 儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例,而非限制,圖6示出了遠(yuǎn)程應(yīng)用程序248駐留在存儲(chǔ) 器設(shè)備247上。可以理解,所示的網(wǎng)絡(luò)連接是示例性的,且可以使用在計(jì)算機(jī)之間 建立通信鏈路的其它手段。
應(yīng)該理解,此處描述的各種技術(shù)可以結(jié)合硬件或軟件或兩者的適當(dāng)組合來實(shí) 現(xiàn)。這樣,本發(fā)明的方法和裝置或其某些方面或部分,可以采用包含在有形介質(zhì)中 的程序代碼(即,指令)的形式,有形介質(zhì)諸如軟盤、CD-ROM、硬盤或任何其它 機(jī)器可讀存儲(chǔ)介質(zhì),其中,當(dāng)程序代碼被加載至諸如計(jì)算機(jī)等機(jī)器并由其運(yùn)行時(shí), 該機(jī)器成為用于實(shí)現(xiàn)本發(fā)明的裝置。在程序代碼在可編程計(jì)算機(jī)上運(yùn)行的情形中, 計(jì)算設(shè)備一般包括處理器、該處理器可讀的存儲(chǔ)介質(zhì)(包括易失性和非易失性的存 儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備。 一個(gè)或多個(gè)程 序可以例如,通過使用API、可重用控件等實(shí)現(xiàn)或利用結(jié)合本發(fā)明描述的過程。這 樣的程序較佳地用高級(jí)過程語言或面向?qū)ο缶幊陶Z言來實(shí)現(xiàn),以與計(jì)算機(jī)系統(tǒng)通 信。然而,如果需要,可以用匯編語言或機(jī)器語言來實(shí)現(xiàn)程序。在任何情形中,語 言可以是編譯的或解釋的語言,且與硬件實(shí)現(xiàn)相結(jié)合。
14盡管示例性實(shí)施例可涉及在一個(gè)或多個(gè)獨(dú)立計(jì)算機(jī)系統(tǒng)的環(huán)境中利用本發(fā)明 的各方面,但本發(fā)明不受此限制,而是可以結(jié)合任何計(jì)算環(huán)境,諸如網(wǎng)絡(luò)或分布式 計(jì)算環(huán)境來實(shí)現(xiàn)。而且,本發(fā)明的各方面可以在多個(gè)處理芯片或設(shè)備中實(shí)現(xiàn)或跨多 個(gè)處理芯片或設(shè)備實(shí)現(xiàn),且存儲(chǔ)可以類似地跨多個(gè)設(shè)備來實(shí)現(xiàn)。這樣的設(shè)備可以包 括,個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)、手持式設(shè)備、超級(jí)計(jì)算機(jī)或集成至諸如汽車和飛機(jī) 等其它系統(tǒng)的計(jì)算機(jī)。
接著參考圖7,示出了可在其中實(shí)現(xiàn)眾多計(jì)算機(jī)化的過程以執(zhí)行以上所述并在 同步屏障的圖1到圖5中所示的過程的示例性聯(lián)網(wǎng)計(jì)算環(huán)境。例如,并行計(jì)算可以
是這樣的聯(lián)網(wǎng)環(huán)境的一部分,其中各個(gè)客戶機(jī)在圖7的網(wǎng)絡(luò)上使用諸如圖3到5 中的同步屏障。本領(lǐng)域的普通技術(shù)人員可以理解,網(wǎng)絡(luò)可以連接任何計(jì)算機(jī)或其它 客戶機(jī)或服務(wù)器設(shè)備,或處于分布式計(jì)算環(huán)境中。就此,含有任何數(shù)量的處理、存 儲(chǔ)器或存儲(chǔ)單元,以及同時(shí)發(fā)生的任何數(shù)量的應(yīng)用程序和進(jìn)程的任何計(jì)算機(jī)系統(tǒng)或 環(huán)境被認(rèn)為適用于本發(fā)明所提供的系統(tǒng)和方法。
分布式計(jì)算通過計(jì)算設(shè)備和系統(tǒng)之間的交換提供了計(jì)算機(jī)資源和服務(wù)的共 享。這些資源和服務(wù)包括信息的交換、文件的高速緩存存儲(chǔ)和磁盤存儲(chǔ)。分布式計(jì) 算利用網(wǎng)絡(luò)連接,允許客戶機(jī)利用它們的集體力量來使整個(gè)企業(yè)受益。就此,各種 設(shè)備可以含有其中包含此處所描述各進(jìn)程的應(yīng)用程序、對(duì)象或資源。
圖7提供了示例性的網(wǎng)絡(luò)化或分布式計(jì)算環(huán)境的示意圖。環(huán)境包括計(jì)算設(shè)備
271、 272、 276和277,以及對(duì)象273、 274和275,還有數(shù)據(jù)庫278。這些實(shí)體271 、
272、 273、 274、 275、 276、 277和278中的每一個(gè)可以包括或使用程序、方法、 數(shù)據(jù)存儲(chǔ)、可編程邏輯等。實(shí)體271、 272、 273、 274、 275、 276、 277和278可以 跨諸如PDA、音頻/視頻設(shè)備、MP3播放器、個(gè)人計(jì)算機(jī)等的相同或不同設(shè)備的各 部分。每一實(shí)體271、 272、 273、 274、 275、 276、 277和278可以經(jīng)由通信網(wǎng)絡(luò) 270與另一實(shí)體271、 272、 273、 274、 275、 276、 277和278通信。就此,任何實(shí) 體可以負(fù)責(zé)維護(hù)和更新數(shù)據(jù)庫278或其它存儲(chǔ)元件。
網(wǎng)絡(luò)270本身可以包括向圖7的系統(tǒng)提供服務(wù)的其它計(jì)算實(shí)體,且其本身可 以表示多個(gè)互連的網(wǎng)絡(luò)。根據(jù)本發(fā)明的一方面,每一實(shí)體271、 272、 273、 274、 275、 276、 277和278可以包括可使用API或其它對(duì)象、軟件、固件和/或硬件來 請(qǐng)求其它實(shí)體271、 272、 273、 274、 275、 276、 277和278中的一個(gè)或多個(gè)的服務(wù) 的離散的功能性程序模塊。
也可以理解,諸如275的對(duì)象可以主存于另一計(jì)算設(shè)備276上。這樣,盡管所示的物理環(huán)境可以將所連接的設(shè)備示為計(jì)算機(jī),但是這樣的說明僅是示例性的,
并且該物理環(huán)境可以被替換地描述或描繪成含有諸如PDA、電視機(jī)、MP3播放器 等的各種數(shù)字設(shè)備,以及諸如接口、 COM對(duì)象等軟件對(duì)象。
存在支持分布式計(jì)算環(huán)境的各種系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計(jì)算系統(tǒng)可 以由有線或無線系統(tǒng)、本地網(wǎng)絡(luò)或廣泛分布的網(wǎng)絡(luò)連接在一起。目前,許多網(wǎng)絡(luò)被 耦合至因特網(wǎng),從而為廣泛分布的計(jì)算提供基礎(chǔ)架構(gòu)并包含多個(gè)不同的網(wǎng)絡(luò)。無論 是否被耦合至因特網(wǎng),任何這樣的基礎(chǔ)架構(gòu)可以用于本發(fā)明所提供的系統(tǒng)和方法。
網(wǎng)絡(luò)基礎(chǔ)架構(gòu)可以允許諸如客戶機(jī)/服務(wù)器、對(duì)等或混合體系結(jié)構(gòu)等各種網(wǎng)絡(luò) 拓?fù)浣Y(jié)構(gòu)。"客戶機(jī)"是使用它無關(guān)的另一類或組的服務(wù)的一個(gè)類或組中的成員。 在計(jì)算中,客戶機(jī)是進(jìn)程,即大致上是請(qǐng)求由另一程序提供的服務(wù)的一組指令或任 務(wù)。客戶機(jī)進(jìn)程利用所請(qǐng)求的服務(wù),而不必"知道"有關(guān)其它程序或服務(wù)本身的任 何工作細(xì)節(jié)。在客戶機(jī)/服務(wù)器體系結(jié)構(gòu)中,尤其在網(wǎng)絡(luò)化系統(tǒng)中,客戶機(jī)通常是 訪問由例如服務(wù)器等另一計(jì)算機(jī)提供的共享的網(wǎng)絡(luò)資源的計(jì)算機(jī)。在圖7的示例 中,取決于環(huán)境,任何實(shí)體271、 272、 273、 274、 275、 276、 277和278可以被認(rèn) 為是客戶機(jī)、服務(wù)器或兩者。
服務(wù)器通常,但不必須是可通過諸如因特網(wǎng)等遠(yuǎn)程或本地網(wǎng)絡(luò)訪問的遠(yuǎn)程計(jì) 算機(jī)系統(tǒng)??蛻魴C(jī)進(jìn)程可以在第一計(jì)算機(jī)系統(tǒng)中活動(dòng),而服務(wù)器進(jìn)程可以在第二計(jì) 算機(jī)系統(tǒng)中活動(dòng),它們通過通信介質(zhì)彼此通信,從而提供分布式功能并允許多個(gè)客 戶機(jī)利用服務(wù)器的信息收集能力。任何軟件對(duì)象可以跨多個(gè)計(jì)算設(shè)備或?qū)ο蠓植肌?br>
客戶機(jī)和服務(wù)器利用由協(xié)議層提供的功能來彼此通信。例如,超文本傳輸協(xié) 議(HTTP)是用于萬維網(wǎng)(WWW)或"Web"的常見協(xié)議。通常,諸如網(wǎng)際協(xié) 議(IP)地址或諸如統(tǒng)一資源定位器(URL)等其它引用的計(jì)算機(jī)網(wǎng)絡(luò)地址可以用 于彼此標(biāo)識(shí)服務(wù)器或客戶計(jì)算機(jī)。網(wǎng)絡(luò)地址可以被稱為URL地址??梢酝ㄟ^通信 介質(zhì)來提供通信,例如客戶機(jī)和服務(wù)器可以通過用于大容量通信的TCP/IP連接來 彼此耦合。
考慮到可以根據(jù)圖7中提供的通用架構(gòu)構(gòu)建的各種計(jì)算環(huán)境,以及在諸如圖7 的網(wǎng)絡(luò)環(huán)境中的計(jì)算中可能發(fā)生的變化,此處提供的系統(tǒng)和方法不能被解釋為以任 何方式限于某一特定的計(jì)算體系結(jié)構(gòu)。而是,本發(fā)明不應(yīng)限于任何單個(gè)實(shí)施例,而 是應(yīng)該根據(jù)所附權(quán)利要求書的寬度和范圍來解釋。
權(quán)利要求
1. 一種方法,包括經(jīng)由通過同步屏障方法實(shí)現(xiàn)的同步屏障來同步軟件線程;以及提供要在所述同步屏障方法內(nèi)改變并讀取以確定何時(shí)應(yīng)釋放軟件線程的變量,其中所述變量是所述同步屏障方法的局部變量。
2. 如權(quán)利要求l所述的方法,其特征在于,所述變量在與所述方法相關(guān)聯(lián)的 代碼塊中已知,但不可由所述塊外的代碼訪問。
3. 如權(quán)利要求l所述的方法,其特征在于,所述變量的值不在所述方法外被 存儲(chǔ)。
4. 如權(quán)利要求1所述的方法,其特征在于,所述變量的值不被跨對(duì)所述同步 屏障方法的多個(gè)調(diào)用存儲(chǔ)。
5. —種方法,包括經(jīng)由通過同步屏障方法實(shí)現(xiàn)的同步屏障來同步軟件線程;以及 確保線程在處于所述同步屏障方法中時(shí)執(zhí)行的最后一個(gè)操作為寫以確保所述 屏障的安全刪除。
6. 如權(quán)利要求5所述的方法,其特征在于,所述確保動(dòng)作包括 維護(hù)對(duì)己經(jīng)離開所述同步屏障的變量的計(jì)數(shù)。
7. 如權(quán)利要求5所述的方法,其特征在于,所述維護(hù)動(dòng)作包括 由要到達(dá)所述屏障的最后一個(gè)線程在從所述屏障釋放其它線程之前將一字段設(shè)置為預(yù)定值;以及由所述其它線程在各自返回之前對(duì)所述字段遞增。
8. 如權(quán)利要求5所述的方法,其特征在于,還包括 使用是否有線程正阻塞的指示來確定是否有線程正阻塞; 由到達(dá)所述屏障的最后一個(gè)線程來對(duì)之前事件復(fù)位;通過檢查所述是否有線程正阻塞的指示來確定是否由所述到達(dá)所述屏障的最后一個(gè)線程來對(duì)當(dāng)前事件復(fù)位;釋放等待所述最后一個(gè)線程到達(dá)所述屏障的自旋線程;以及 檢查所述是否有線程正阻塞的指示,若所述檢查給出指示,則由到達(dá)所述屏障的最后一個(gè)線程對(duì)當(dāng)前事件置位以釋放在等待所述最后一個(gè)線程到達(dá)同時(shí)正阻塞的線程。
9. 如權(quán)利要求8所述的方法,其特征在于,所述使用是否有線程正阻塞的指 示來確定是否有線程正阻塞的動(dòng)作包括由決定阻塞的線程檢查所述是否有線程正阻塞的指示;如果所述是否有線程正阻塞的指示未被置位,則由決定阻塞的線程對(duì)所述是 否有線程正阻塞的指示置位,以指示所述到達(dá)所述屏障的最后一個(gè)線程必須對(duì)所述 事件置位;由所述決定阻塞的線程檢查指示所述最后一個(gè)線程是否己到達(dá)所述屏障的變?nèi)绻鶛z査的變量指示所述最后一個(gè)線程尚未到達(dá)所述屏障,則通過阻塞來 等待直到所述事件被置位。
10. —種方法,包括經(jīng)由通過同步屏障方法實(shí)現(xiàn)的同步屏障來同步軟件線程;提供要在所述同步屏障方法內(nèi)改變并被檢查以確定何時(shí)應(yīng)釋放軟件線程的變 量,其中所述變量是所述同步屏障方法的局部變量;確保線程當(dāng)處于所述同步屏障方法中時(shí)執(zhí)行的所述最后一個(gè)操作為寫,以通 過維護(hù)對(duì)已經(jīng)離開所述同步屏障的變量的計(jì)數(shù)來確保所述屏障的安全刪除;使用是否有線程正阻塞的指示來確定是否有線程正阻塞;由到達(dá)所述屏障的最后一個(gè)線程對(duì)之前事件復(fù)位;通過檢查所述是否有線程正阻塞的指示來確定是否由所述到達(dá)所述屏障的最 后一個(gè)線程來對(duì)當(dāng)前事件復(fù)位;釋放等待所述最后一個(gè)線程到達(dá)屏障的自旋線程;檢查所述是否有線程正阻塞的指示,若所述檢査給出指示,則由到達(dá)所述屏 障的最后一個(gè)線程對(duì)當(dāng)前事件置位以釋放在等待所述最后一個(gè)線程到達(dá)同時(shí)正阻 塞的線程,其中所述是否有線程正阻塞的指示是僅當(dāng)有線程決定阻塞時(shí)才被創(chuàng)建。
11. 一種其上具有用于執(zhí)行如權(quán)利要求1所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
12. —種其上具有用于執(zhí)行如權(quán)利要求2所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
13. —種其上具有用于執(zhí)行如權(quán)利要求3所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
14. 一種其上具有用于執(zhí)行如權(quán)利要求4所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
15. —種其上具有用于執(zhí)行如權(quán)利要求5所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
16. —種其上具有用于執(zhí)行如權(quán)利要求6所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
17. —種其上具有用于執(zhí)行如權(quán)利要求7所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
18. —種其上具有用于執(zhí)行如權(quán)利要求8所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
19. 一種其上具有用于執(zhí)行如權(quán)利要求9所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
20. —種其上具有用于執(zhí)行如權(quán)利要求IO所述的方法的指令的計(jì)算機(jī)可讀介質(zhì)。
全文摘要
提供阻塞局部意義同步屏障。局部意義變量不是處理器私有或全局的,而是真正對(duì)同步屏障函數(shù)局部的。通過確保線程在屏障上執(zhí)行的最后一個(gè)操作為寫來提供安全刪除。恰在返回之前,線程對(duì)指示已經(jīng)離開屏障的線程的計(jì)數(shù)的字段遞增。支持阻塞,使得線程自旋某一時(shí)間間隔,且當(dāng)它們決定阻塞時(shí),檢查是否有線程正阻塞的指示并對(duì)其置位(如果尚未置位),所述指示將由最后一個(gè)到達(dá)屏障的線程來檢查以確定是否對(duì)事件置位以釋放阻塞線程。
文檔編號(hào)G06F9/46GK101501643SQ200680025302
公開日2009年8月5日 申請(qǐng)日期2006年7月12日 優(yōu)先權(quán)日2005年7月12日
發(fā)明者A·U·基什, J·D·莫里森, J·瑞克特, N·M·克里福特 申請(qǐng)人:微軟公司