專利名稱:使用類型穩(wěn)定性來便于爭用管理的制作方法
使用類型穩(wěn)定性來便于爭用管理
扭旦 冃足
事務(wù)存儲器是允許更簡單地編寫并發(fā)程序的機制。事務(wù)指定應(yīng)當(dāng)"如同" 其孤立地執(zhí)行一樣執(zhí)行的代碼序列。在實踐中,允許并發(fā)地執(zhí)行事務(wù),并隨后 檢測沖突數(shù)據(jù)訪問。在爭用發(fā)生時要做什么的判定(即,"爭用管理")可對 事務(wù)系統(tǒng)的性能具有大的影響。
然而,在實現(xiàn)爭用管理器中存在重要的底層問題。假設(shè)事務(wù)Txl檢測到與 事務(wù)Tx2的爭用一也許Tx2持有對Txl也希望鎖定的數(shù)據(jù)項目的悲觀寫鎖。 在某些情況下,爭用管理器中止Tx2以允許Txl獲取該鎖可能是有意義的。也 許Tx2短,而Txl長,因此在中止之后重做Tx2的工作的成本會比重做Txl
少得多。
但在此示例場景中,Txl注意到爭用,且因此似乎是執(zhí)行爭用管理判定的 邏輯的邏輯位置。但為了這樣做,需要關(guān)于Tx2的信息,諸如關(guān)于其執(zhí)行的統(tǒng) 計數(shù)據(jù)、其事務(wù)日志的內(nèi)容等,或者也許需要請求Tx2自愿地中止,以釋放其 獲取的鎖。此信息最自然地駐留在表示事務(wù)Tx2的數(shù)據(jù)結(jié)構(gòu)中。出于效率的原 因,期望使此數(shù)據(jù)結(jié)構(gòu)對執(zhí)行Tx2的線程來說是本地的,而不在某個全局?jǐn)?shù)據(jù) 結(jié)構(gòu)中。事務(wù)存儲器系統(tǒng)將定義某些覆蓋每一可能被共享的數(shù)據(jù)項目的鎖定數(shù) 據(jù)結(jié)構(gòu)。在一位置被寫鎖定時,此鎖定數(shù)據(jù)結(jié)構(gòu)將包含某些持有該鎖的事務(wù)的 指示。在Txl發(fā)現(xiàn)其設(shè)法訪問的數(shù)據(jù)項目被寫鎖定時,它可以讀取此鎖定數(shù)據(jù) 結(jié)構(gòu)以發(fā)現(xiàn)Tx2的身份。該問題的癥結(jié)是一旦Txl獲取了指向表示Tx2的數(shù) 據(jù)結(jié)構(gòu)的指針,并準(zhǔn)備從該數(shù)據(jù)結(jié)構(gòu)中讀取信息,Tx2可能完成,且其數(shù)據(jù)結(jié) 構(gòu)出于某些其它目的可被解除分配,且可能被重新分配。在此情況中,Txl讀 取的關(guān)于Tx2的信息是不穩(wěn)定的。
概述
公開了用于提供類型穩(wěn)定性技術(shù)以增進(jìn)爭用管理的各種技術(shù)和方法。事務(wù)
5存儲器系統(tǒng)提供允許事務(wù)安全地檢查表示其它事務(wù)的數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)機 制。使用引用計數(shù)機制來便于兩個事務(wù)之間的沖突的解決(稱為"爭用管理")。 例如,因為一個事務(wù)試圖獲取另一事務(wù)所擁有的獨占鎖,所以獲取關(guān)于擁有事 務(wù)的信息。遞增表示擁有事務(wù)的數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)。系統(tǒng)確保遞增正確的事 務(wù)數(shù)據(jù)結(jié)構(gòu)引用計數(shù),以防止該數(shù)據(jù)結(jié)構(gòu)被解除分配和重新分配以表示另一事 務(wù)。如果擁有事務(wù)仍然持有導(dǎo)致該沖突的鎖,則擁有事務(wù)數(shù)據(jù)結(jié)構(gòu)中的信息通 知確定是中止兩個事務(wù)之一還是等待擁有事務(wù)釋放該鎖的爭用管理判定。
在作出爭用管理判定時,擁有事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)被之前對其遞增的 沖突事務(wù)遞減。每一事務(wù)數(shù)據(jù)結(jié)構(gòu)以引用計數(shù)l開始,且隨著事務(wù)完成,其遞 減其數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)。非零引用計數(shù)防止在另一線程中的沖突事務(wù)正在訪
問事務(wù)數(shù)據(jù)結(jié)構(gòu)的同時該事務(wù)數(shù)據(jù)結(jié)構(gòu)被解除分配??稍谄湟糜嫈?shù)為零時對 數(shù)據(jù)結(jié)構(gòu)解除分配。
在一實現(xiàn)中,可使用一不穩(wěn)定屬性來減少專用類型穩(wěn)定分配池。線程不穩(wěn) 定屬性在指向事務(wù)數(shù)據(jù)結(jié)構(gòu)的指針可由線程獲取之前被設(shè)置,且在此類指針的 使用完成之后被清除。在垃圾收集暫停期間,僅當(dāng)未在線程中的任何一個上設(shè) 置線程不穩(wěn)定屬性時,才可刪除類型穩(wěn)定分配池中的對象。
提供本概述以便以簡化形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些 概念。本概述不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在 用于幫助確定所要求保護(hù)的主題的范圍。
附圖簡述
圖1是一個實現(xiàn)的計算機系統(tǒng)的圖示。
圖2是在圖1的計算機系統(tǒng)上操作的一個實現(xiàn)的事務(wù)存儲器應(yīng)用程序的圖示。
圖3是圖1的系統(tǒng)的一個實現(xiàn)的高級過程流程圖。
圖4是圖1的系統(tǒng)的一個實現(xiàn)的過程流程圖,其示出使得事務(wù)日志分段類 型穩(wěn)定所涉及的各階段。
圖5是圖1的系統(tǒng)的一個實現(xiàn)的過程流程圖,其示出使得事務(wù)數(shù)據(jù)結(jié)構(gòu)類 型穩(wěn)定所涉及的各階段。圖6是圖1的系統(tǒng)的一個實現(xiàn)的過程流程圖,其示出由參與引用計數(shù)機制 的持有鎖的事務(wù)所采取的動作。
圖7是圖1的系統(tǒng)的一個實現(xiàn)的過程流程圖,其示出由參與引用計數(shù)機制 的、注意到爭用的事務(wù)所采取的動作。
圖8是在兩個事務(wù)之間使用引用計數(shù)機制的一個實現(xiàn)的圖示。
圖9是圖1的系統(tǒng)的一個實現(xiàn)的過程流程圖,其示出使用不穩(wěn)定屬性來減 少專用類型穩(wěn)定分配池所涉及的各階段。
圖10是示出通過跟蹤指向類型穩(wěn)定存儲器的指針的位置來減少專用類型
穩(wěn)定分配池的替換實現(xiàn)的過程流程圖。 詳細(xì)描述
此處的技術(shù)和方法可以在如事務(wù)存儲器系統(tǒng)的一般上下文中描述,但本技 術(shù)和方法也用于除此之外的其它目的。在一個實現(xiàn)中,此處所描述的一個或多
個技術(shù)可被實現(xiàn)為諸如微軟⑧.NET框架等框架程序內(nèi)的、或來自為開發(fā)者提 供開發(fā)軟件應(yīng)用程序的平臺的任何其它類型的程序或服務(wù)的特征。在另一實現(xiàn) 中,此處所描述的一個或多個技術(shù)被實現(xiàn)為處理開發(fā)在并發(fā)環(huán)境中執(zhí)行的應(yīng)用 程序的其它應(yīng)用程序的特征。
在一實現(xiàn)中,提供使用類型穩(wěn)定性技術(shù)以啟用無鎖爭用管理的事務(wù)存儲器 系統(tǒng)。在一實現(xiàn)中,提供允許一個事務(wù)安全地檢査表示另一事務(wù)的數(shù)據(jù)結(jié)構(gòu)的 引用計數(shù)機制。此處所使用的術(shù)語"引用計數(shù)機制"指的是包括用于跟蹤一給 定事務(wù)數(shù)據(jù)結(jié)構(gòu)的數(shù)字或其它數(shù)據(jù),其指示在特定時間是否有其它事務(wù)對該給 定數(shù)據(jù)結(jié)構(gòu)有興趣,且用于在其它事務(wù)有興趣時防止該給定數(shù)據(jù)結(jié)構(gòu)被解除分 配(返回到類型穩(wěn)定池)。此處所使用的術(shù)語"類型穩(wěn)定分配池"表示從中對
象以特殊方式被分配的存儲器池 一旦分配了一表示類型T的對象的塊,就永
不重新使用該存儲器來表示某個其它類型U。因此,總可將指向這樣的T的指 針假設(shè)為指向T。此處所使用的術(shù)語"安全地檢查"指的是包括以在檢查進(jìn)行 的同時不允許正在被檢查的數(shù)據(jù)被解除分配的方式來檢查數(shù)據(jù)的能力。事務(wù)數(shù) 據(jù)結(jié)構(gòu)的引用計數(shù)被登記對其的興趣的每一其它事務(wù)遞增。在此興趣結(jié)束時遞 減該引用計數(shù)。當(dāng)然,每一事務(wù)對表示它本身的數(shù)據(jù)結(jié)構(gòu)具有"興趣",所以
7這些數(shù)據(jù)結(jié)構(gòu)被分配為引用計數(shù)1,且在事務(wù)完成時,遞減其事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)。不可對數(shù)據(jù)結(jié)構(gòu)解除分配直到其引用計數(shù)是零。在另一實現(xiàn)中,可通過由垃圾收集器所識別的不穩(wěn)定屬性的使用來安全地釋放專用類型穩(wěn)定分配池。線程不穩(wěn)定屬性在指向事務(wù)數(shù)據(jù)結(jié)構(gòu)的指針可由線程獲取之前被設(shè)置,且在這些指針的所有使用完成之后被復(fù)位。在垃圾收集暫停期間,僅在未在線程中的任何一個上設(shè)置線程不穩(wěn)定屬性時,才可刪除類型穩(wěn)定分配池中的對象。
如圖1所示,用于實現(xiàn)本系統(tǒng)的一個或多個部分的示例性計算機系統(tǒng)包括
諸如計算設(shè)備100等計算設(shè)備。在其最基本的配置中,計算設(shè)備100通常包括至少一個處理單元102和存儲器104。取決于計算設(shè)備的確切配置和類型,存儲器104可以是易失性的(如RAM)、非易失性的(如ROM、閃存等)或是兩者的某種組合。該最基本配置在圖1中由虛線106來示出。
另夕卜,設(shè)備100還可具有附加特征/功能。例如,設(shè)備100還可包含附加存儲(可移動和/或不可移動),包括但不限于磁盤、光盤或磁帶。這樣的附加存儲在圖1中由可移動存儲108和不可移動存儲110示出。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。存儲器104、可移動存儲108和不可移動存儲110都是計算機存儲介質(zhì)的示例。計算機存儲介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲、磁帶盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或者可用于存儲所需信息并且可由設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計算機存儲介質(zhì)都可以是設(shè)備100的一部分。
計算設(shè)備100包括允許計算設(shè)備100與其它計算機/應(yīng)用程序115進(jìn)行通信的一個或多個通信連接114。設(shè)備100也可具有輸入設(shè)備112,諸如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等。還可包括輸出設(shè)備lll,如顯示器、揚聲器、打印機等。這些設(shè)備在本領(lǐng)域中公知且無需在此處詳細(xì)討論。在一個實現(xiàn)中,計算設(shè)備100包括事務(wù)存儲器應(yīng)用程序200。事務(wù)存儲器應(yīng)用程序200將在圖2中更詳細(xì)地描述。
現(xiàn)在轉(zhuǎn)向圖2并繼續(xù)參考圖1,示出了在計算設(shè)備100上操作的事務(wù)存儲器應(yīng)用程序200。事務(wù)存儲器應(yīng)用程序200是駐留在計算設(shè)備100上的應(yīng)用程序中的一個。然而,可以理解,事務(wù)存儲器應(yīng)用程序200可另選地或另外地被具體化為一個或多個計算機上的計算機可執(zhí)行指令和/或與圖1所示的不同的變型。另選地或另外地,事務(wù)存儲器應(yīng)用程序200的一個或多個部分可以是系統(tǒng)存儲器104的一部分、可以在其它計算機和/或應(yīng)用程序115上、或可以是計算機軟件領(lǐng)域的技術(shù)人員能想到的其它此類變型。
事務(wù)存儲器應(yīng)用程序200包括負(fù)責(zé)執(zhí)行在此描述的技術(shù)中的一些或全部的程序邏輯204。程序邏輯204包括用于提供爭用管理器的邏輯206;用于使事務(wù)日志分段類型穩(wěn)定的邏輯208 (如以下參考圖4所述);用于使事務(wù)數(shù)據(jù)結(jié)構(gòu)類型穩(wěn)定的邏輯210 (如以下參考圖5所述);用于使用引用計數(shù)機制來允許第一事務(wù)安全地檢査第二事務(wù)的狀態(tài)的邏輯212 (如以下參考圖6-8所述);用于適當(dāng)?shù)販p少專用類型穩(wěn)定分配池的邏輯214 (如以下參考圖9-10所述);以及用于操作應(yīng)用程序的其它邏輯220。
現(xiàn)在轉(zhuǎn)向圖3-10并繼續(xù)參考圖1-2,更詳細(xì)地描述了用于實現(xiàn)事務(wù)存儲器應(yīng)用程序200的一個或多個實現(xiàn)的各階段。在某些實現(xiàn)中,圖3-10的過程至少部分地在計算設(shè)備100的操作邏輯中實現(xiàn)。圖3是事務(wù)存儲器應(yīng)用程序200的高級過程流程圖。應(yīng)該理解,盡管按次序描述圖3,但不存在期望的次序,且可按其它次序提供和/或執(zhí)行圖3中所述的各特征和/或動作。該過程在起始點240開始,如圖4中更詳細(xì)地描述地,使事務(wù)日志分段類型穩(wěn)定(階段242)。類型穩(wěn)定性保證由類型穩(wěn)定指針?biāo)赶虻膶ο缶哂兴甘镜念愋汀T谝徊l(fā)環(huán)境中,所討論的對象的內(nèi)容可被并發(fā)線程改變,但其類型將不改變。如在圖5中更詳細(xì)地描述地,系統(tǒng)使事務(wù)數(shù)據(jù)結(jié)構(gòu)類型穩(wěn)定(階段244)。如圖6-8中更詳細(xì)地描述地,使用引用計數(shù)機制來允許另一事務(wù)防止其感興趣的事務(wù)數(shù)據(jù)結(jié)構(gòu)被解除分配(階段246)。如圖9和IO中更詳細(xì)地描述的,該系統(tǒng)可任選地適當(dāng)減少專用類型穩(wěn)定分配池(階段248)。該過程在結(jié)束點250處結(jié)束。
圖4示出使事務(wù)日志分段類型穩(wěn)定所涉及的各階段的一個實現(xiàn)。應(yīng)該理解,盡管按次序描述圖4,但不存在期望的次序,且可按其它次序提供和/或執(zhí)行圖4中所述的各特征和/或動作。該過程在起始點270開始,確保如果指針是指向日志分段的指針,則其將在之后的時間中保持如此(階段272)。系統(tǒng)使所有日志分段大小相等,且與其分配大小對齊(階段274)。系統(tǒng)使用指向表
示其擁有事務(wù)的數(shù)據(jù)結(jié)構(gòu)的指針來開始每一日志分段(276)。給定指向曰志
分段中的寫日志條目的指針,則可計算指向該日志分段的起始的指針(階段
278)。該過程在結(jié)束點280處結(jié)束。
圖5示出使事務(wù)數(shù)據(jù)結(jié)構(gòu)類型穩(wěn)定所涉及的各階段的一個實現(xiàn)。該過程在起始點290開始,提供僅增長的事務(wù)數(shù)據(jù)結(jié)構(gòu)的全局池(階段292)。為使得分配更有效率,向線程局部分配池給出全局池中的事務(wù)數(shù)據(jù)結(jié)構(gòu)中的中等大小的組塊(階段294)。這使得解除引用指向事務(wù)數(shù)據(jù)結(jié)構(gòu)的給定指針是安全的(階段296)。該過程在結(jié)束點298處結(jié)束。
圖6示出由參與引用計數(shù)機制的、持有鎖的事務(wù)所采取的動作的一個實現(xiàn)。該過程在起始點310開始,給予新分配的事務(wù)數(shù)據(jù)結(jié)構(gòu)引用計數(shù)1,以表示由其表示的事務(wù)所使用(階段312)。在每一事務(wù)完成時,其遞減其自己的事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)(階段314)。如果該引用計數(shù)變?yōu)榱?,則可對該數(shù)據(jù)結(jié)構(gòu)解除分配(階段316)。如果引用計數(shù)大于零,則它不被解除分配,而將解除分配責(zé)任傳遞到最終將該引用計數(shù)減為零的事務(wù)(階段318)。該過程在結(jié)束點320處結(jié)束。
圖7示出由參與引用計數(shù)機制的、注意到爭用的事務(wù)所采取的動作的一個實現(xiàn)。該過程在起始點340開始,跟蹤對象中的鎖定信息以獲取指向表示可能擁有事務(wù)的數(shù)據(jù)結(jié)構(gòu)的指針(階段342)。在可能擁有事務(wù)的數(shù)據(jù)結(jié)構(gòu)中遞增引用計數(shù)(階段344)。在再次跟蹤對象中的鎖定信息后,確定正確事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)是否被遞增(判定點346)。如果鎖定信息仍然指向同一事務(wù)數(shù)據(jù)結(jié)構(gòu),則該事務(wù)數(shù)據(jù)結(jié)構(gòu)是用于該"正確事務(wù)"的。如果正確引用計數(shù)未被遞增,則可能擁有事務(wù)的數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)遞減且鎖定在較高層級重試(階段348)。
如果正確事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)被遞增(判定點346),則作出是中止?fàn)幱檬聞?wù)、還是中止自己(注意到該爭用的事務(wù))、等待爭用事務(wù)釋放鎖的爭用管理判定(階段350)。擁有事務(wù)數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)隨后被遞減,且如果該遞減使該數(shù)據(jù)結(jié)構(gòu)的引用計數(shù)到零則刪除該數(shù)據(jù)結(jié)構(gòu)。該過程在結(jié)束點354處結(jié)束。圖8是在兩個事務(wù)之間使用引用計數(shù)機制的一個實現(xiàn)的圖示。第一事務(wù)
362具有數(shù)據(jù)結(jié)構(gòu)364和事務(wù)日志分段366。第二事務(wù)363也具有數(shù)據(jù)結(jié)構(gòu)365 和事務(wù)日志分段367。在第二事務(wù)363由于被爭用的對象369而登記對第一事 務(wù)362的數(shù)據(jù)結(jié)構(gòu)的興趣時,第二事務(wù)363讀取被爭用的對象369中的鎖定信 息以發(fā)現(xiàn)該對象被鎖定且第一事務(wù)362持有該鎖。在此實現(xiàn)中,被爭用的對象 369中的鎖定信息包含指向鎖定事務(wù)362的日志中的條目的指針,其包含關(guān)于 該鎖定的更多信息。如前所述,日志分段包含指向其擁有事務(wù)數(shù)據(jù)結(jié)構(gòu)364的 指針。在其它實現(xiàn)中,可使用其它鎖定機制來標(biāo)識擁有該鎖的事務(wù)的數(shù)據(jù)結(jié)構(gòu)。 例如,鎖定信息可能直接指示擁有事務(wù),且可將關(guān)于存儲在日志分段366中的 日志條目中的鎖定的其它信息保存在由被鎖定的對象的地址所索引的散列表 中。
第二事務(wù)遞增第一事務(wù)362的數(shù)據(jù)結(jié)構(gòu)364中的引用計數(shù)(在此遞增之后, 以值2示出)。在此過程期間,執(zhí)行第一事務(wù)的線程不被停止。其可繼續(xù)執(zhí)行, 完成其事務(wù)工作362,并對表示它的數(shù)據(jù)結(jié)構(gòu)364解除分配。此數(shù)據(jù)結(jié)構(gòu)甚至 可以被重新分配以表示第三事務(wù)。遞增引用計數(shù)的目的是防止解除分配,但該 遞增可在這些步驟之后發(fā)生,使得該數(shù)據(jù)結(jié)構(gòu)被解除分配或表示一不同事務(wù)。 第二事務(wù)363因此必須在遞增引用計數(shù)之后驗證數(shù)據(jù)結(jié)構(gòu)364仍然表示感興趣 的事務(wù)。第二事務(wù)363再次檢查爭用對象364中的鎖定信息,以驗證其仍然指 向同一事務(wù)數(shù)據(jù)結(jié)構(gòu)364。如果鎖定信息不指向該同一數(shù)據(jù)結(jié)構(gòu),則被爭用的 對象369的鎖定信息已經(jīng)改變,因為鎖定過程現(xiàn)在可能成功,所以從開頭重試 鎖定過程。如果鎖定信息指向同一事務(wù)數(shù)據(jù)結(jié)構(gòu)364,則事務(wù)363已經(jīng)獲取指 向第一事務(wù)362的數(shù)據(jù)結(jié)構(gòu)364的指針368,以便其可安全地檢查數(shù)據(jù)結(jié)構(gòu)364 以便于被爭用的對象369的爭用管理判定。在第二事務(wù)363完成時,其遞減第 一事務(wù)362中的數(shù)據(jù)結(jié)構(gòu)364的引用計數(shù)以指示其對該數(shù)據(jù)結(jié)構(gòu)不再有興趣。 特定事務(wù)數(shù)據(jù)結(jié)構(gòu)不可被解除分配直到其引用計數(shù)為零,這意味著不再有對其 數(shù)據(jù)感興趣的任何事務(wù)。如果事務(wù)362已經(jīng)在之前完成,則事務(wù)363進(jìn)行的遞 減可使事務(wù)數(shù)據(jù)結(jié)構(gòu)364的引用計數(shù)到零,在這種情況下事務(wù)363必須對此數(shù) 據(jù)結(jié)構(gòu)解除分配。
圖9示出使用不穩(wěn)定屬性來減少專用類型穩(wěn)定分配池所涉及的各階段的一個實現(xiàn)。該過程在起始點370開始,在當(dāng)前線程上設(shè)置不穩(wěn)定位(階段372)。 隨后獲取指向爭用事務(wù)的指針(階段374)。在一個實現(xiàn)中,每一線程必須在 可能獲取指向事務(wù)數(shù)據(jù)結(jié)構(gòu)的指針之前設(shè)置不穩(wěn)定屬性。作出解決沖突的爭用 管理判定(階段376)。 一旦作出爭用管理判定,則不再使用指向爭用事務(wù)的 指針(階段376)。因此,在當(dāng)前線程上清除不穩(wěn)定位(階段378)。在一個 實現(xiàn)中,如果所有線程都在邏輯收集處被停止,且沒有線程設(shè)置了其不穩(wěn)定屬 性,則類型穩(wěn)定分配池中的對象可被解除分配。此解除分配不是類型穩(wěn)定的, 因為所刪除的存儲器可被返回給操作系統(tǒng)并被重新分配以表示其它類型。該過 程在結(jié)束點380處結(jié)束。
圖10示出對圖9的實現(xiàn)的替換,其示出通過跟蹤指向類型穩(wěn)定存儲器的 指針的位置來減少專用類型穩(wěn)定分配池所涉及的各階段。該過程在起始點400 開始,要求執(zhí)行爭用管理的線程聲明指向類型穩(wěn)定存儲器的指針的位置(階段 402)。系統(tǒng)在類型穩(wěn)定分配池上執(zhí)行類似垃圾收集的過程,以標(biāo)識正在使用 的元素(階段404)。系統(tǒng)可任選地對剩余類型穩(wěn)定分配池中的某一些解除分 配(階段406)。該過程在結(jié)束點408處結(jié)束。
盡管用對結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解, 所附權(quán)利要求書中定義的主題不必限于上述具體特征或動作。相反,上述具體 特征和動作是作為實現(xiàn)權(quán)利要求的示例形式公開的。落入在此所述和/或所附權(quán) 利要求所描述的實現(xiàn)的精神的范圍內(nèi)的所有等效方案、更改和修正都期望受到 保護(hù)。
例如,計算機軟件領(lǐng)域普通技術(shù)人員將認(rèn)識到,此處所討論的示例可以在 一個或多個計算機上不同地組織來包括比這些示例中所描繪的更少或更多選 項或特征。
1權(quán)利要求
1.一種具有用于使得計算機執(zhí)行以下步驟的計算機可執(zhí)行指令的計算機可讀介質(zhì),所述步驟包括使用類型穩(wěn)定性來分配多個事務(wù)的事務(wù)數(shù)據(jù)結(jié)構(gòu)(210);以及執(zhí)行允許所述事務(wù)中的第一個安全地檢查所述事務(wù)中的第二個的狀態(tài)的引用計數(shù)機制(212)。
2. 如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述第一事務(wù)獲取 指向所述第二事務(wù)的事務(wù)數(shù)據(jù)結(jié)構(gòu)的指針(276)。
3. 如權(quán)利要求2所述的計算機可讀介質(zhì),其特征在于,在所述第一事務(wù)登 記對所述第二事務(wù)的興趣時在所述第二事務(wù)的所述事務(wù)數(shù)據(jù)結(jié)構(gòu)中遞增引用 計數(shù)(344)。
4. 如權(quán)利要求3所述的計算機可讀介質(zhì)中,其特征在于,在所述事務(wù)數(shù)據(jù) 結(jié)構(gòu)第一次被分配時對所述引用計數(shù)給予值1 (312)。
5. 如權(quán)利要求3所述的計算機可讀介質(zhì),其特征在于,使用所述指針來查 看所述第二事務(wù)的所述事務(wù)數(shù)據(jù)結(jié)構(gòu)以作出爭用管理判定(350)。
6. 如權(quán)利要求5所述的計算機可讀介質(zhì),其特征在于,在作出所述爭用管 理判定之后遞減所述第二事務(wù)的所述事務(wù)數(shù)據(jù)結(jié)構(gòu)中的所述引用計數(shù)(352)。
7. 如權(quán)利要求6所述計算機可讀介質(zhì),其特征在于,如果所述引用計數(shù)大 于零,則解除分配的責(zé)任被傳遞到最終將所述引用計數(shù)減少到零的特定事務(wù)(318)。
8. 如權(quán)利要求6所述的計算機可讀介質(zhì),其特征在于,如果所述引用計數(shù) 變?yōu)榱?,則所述事務(wù)數(shù)據(jù)結(jié)構(gòu)被解除分配(316)。
9. 如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述引用計數(shù)機制 可用于允許所述第一事務(wù)在所述第一事務(wù)對所述第二事務(wù)有興趣時防止所述 第二事務(wù)被解除分配(246)。
10. —種使用引用計數(shù)機制來便于爭用管理的方法,所述方法包括以下步驟使用類型穩(wěn)定性來分配多個事務(wù)數(shù)據(jù)結(jié)構(gòu)(244);在檢測到在兩個事務(wù)之間發(fā)生沖突時,獲取關(guān)于擁有事務(wù)的信息,所述擁有事務(wù)是所述兩個事務(wù)之一 (342);在與所述擁有事務(wù)相關(guān)聯(lián)的特定事務(wù)數(shù)據(jù)結(jié)構(gòu)中遞增引用計數(shù)(344); 確保正確事務(wù)被遞增(346);以及 作出如何處理所述沖突的爭用管理判定(350)。
11. 如權(quán)利要求10所述的方法,其特征在于,如果所述確保不成功, 則由于所述沖突消失而重試鎖定一較高層級(348)。
12. 如權(quán)利要求10所述的方法,其特征在于,如果所述正確事務(wù)不被 遞增,則遞減所述引用計數(shù)(348)。
13. 如權(quán)利要求12所述的方法,其特征在于,通過跟蹤對象中的鎖定 信息來獲取所述擁有事務(wù)信息以作出所述正確事務(wù)是否被遞增的判定(346)。
14. 如權(quán)利要求10所述的方法,其特征在于,通過跟蹤與一對象相關(guān) 聯(lián)的鎖定信息來獲取所述擁有事務(wù)信息(346)。
15. 如權(quán)利要求10所述的方法,其特征在于,所述爭用管理判定包括 確定是否中止所述兩個事務(wù)之一或是否等待所述沖突事務(wù)(350)。
16. —種具有用于使得計算機執(zhí)行如權(quán)利要求10所述的步驟的計算機 可執(zhí)行指令的計算機可讀介質(zhì)(200)。
17. —種使用不穩(wěn)定屬性來減少專用類型穩(wěn)定分配池的方法,所述方法 包括以下步驟提供允許多個事務(wù)之一安全地檢查所述事務(wù)中的另一個的事務(wù)數(shù)據(jù)結(jié)構(gòu) 的機制(212);在獲取指向所述事務(wù)數(shù)據(jù)結(jié)構(gòu)的指針之前為所述事務(wù)數(shù)據(jù)結(jié)構(gòu)設(shè)置線程 不穩(wěn)定屬性(372);在不再需要指向所述事務(wù)數(shù)據(jù)結(jié)構(gòu)的所述指針時清除所述線程不穩(wěn)定屬 性(378);以及在垃圾收集暫停期間,如果未在所述線程中的任何一個上設(shè)置所述線程不 穩(wěn)定屬性則刪除類型穩(wěn)定分配池中的對象(404)。
18. 如權(quán)利要求17所述的方法,其特征在于,引用計數(shù)機制維護(hù)所述 事務(wù)數(shù)據(jù)結(jié)構(gòu)上的相應(yīng)引用計數(shù)以跟蹤在給定時刻感興趣的事務(wù)的數(shù)量(246)。
19. 如權(quán)利要求18所述的方法,其特征在于,所述引用計數(shù)機制確保所述事務(wù)數(shù)據(jù)結(jié)構(gòu)不可被解除分配直到所述相應(yīng)引用計數(shù)變?yōu)榱?246)。
20. —種具有用于使得計算機執(zhí)行如權(quán)利要求17所述的步驟的計算機 可執(zhí)行指令的計算機可讀介質(zhì)(200)。
全文摘要
公開了用于提供類型穩(wěn)定性技術(shù)以增進(jìn)爭用管理的各種技術(shù)和方法。提供允許事務(wù)安全地檢查其它事務(wù)的狀態(tài)的引用計數(shù)機制。使用該引用計數(shù)機制來便于爭用管理。當(dāng)在兩個事務(wù)之間檢測到?jīng)_突時,獲取擁有事務(wù)信息。擁有事務(wù)的引用計數(shù)被遞增。系統(tǒng)確保正確事務(wù)被遞增。如果擁有事務(wù)仍然是沖突事務(wù),則作出確定正確解決方案的爭用管理判定。在作出判定時,擁有事務(wù)上的引用計數(shù)被沖突事務(wù)遞減。在每一事務(wù)完成時,其為其本身持有的引用計數(shù)被遞減。不可解除分配數(shù)據(jù)結(jié)構(gòu)直到其引用計數(shù)為零。可使用不穩(wěn)定屬性來減少專用類型穩(wěn)定分配池。
文檔編號G06F12/00GK101689139SQ200880022472
公開日2010年3月31日 申請日期2008年6月18日 優(yōu)先權(quán)日2007年6月29日
發(fā)明者D·德特勒夫, J·J·達(dá)菲, M·M·馬格魯?shù)?申請人:微軟公司