專利名稱:軟件事務(wù)存儲(chǔ)器中的動(dòng)作框架的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件事務(wù)存儲(chǔ)器中的動(dòng)作框架。
背景技術(shù):
可編寫計(jì)算機(jī)程序來允許使用線程或另一合適的并行執(zhí)行機(jī)制來并行地執(zhí)行程序的不同部分。為了并行地執(zhí)行程序的不同部分,計(jì)算機(jī)系統(tǒng)或程序通常包括某種機(jī)制來管理對(duì)這些不同部分的存儲(chǔ)器訪問,以確保各部分按所希望的順序訪問公共存儲(chǔ)器位置。事務(wù)存儲(chǔ)器系統(tǒng)允許程序員指定程序中的可被執(zhí)行的事務(wù),就好像這些事務(wù)隔離地執(zhí)行(即獨(dú)立于程序中的其他事務(wù)和其他非事務(wù)序列)。事務(wù)存儲(chǔ)器系統(tǒng)通過以以下方式執(zhí)行事務(wù)來管理事務(wù)的存儲(chǔ)器訪問,該方式是如果兩個(gè)或更多事務(wù)試圖以沖突的方式訪問同一存儲(chǔ)器位置,則事務(wù)的效果可被回滾或撤銷??墒褂糜布?或軟件來實(shí)現(xiàn)事務(wù)存儲(chǔ)器系統(tǒng)。諸如軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)之類的事務(wù)存儲(chǔ)器系統(tǒng)通常對(duì)支持的編程場(chǎng)景的類型有限制。例如,STM系統(tǒng)通常不支持在事務(wù)中對(duì)線程本地存儲(chǔ)器的使用、事物鎖和傳統(tǒng)鎖之間的互操作、對(duì)靜態(tài)類初始化器和模塊化初始化器的使用、在事物內(nèi)對(duì)軟件鎖省略 (software lock elision)的使用、以及對(duì)定制的抽象并發(fā)控制的使用。盡管STM系統(tǒng)的開發(fā)者可能夠?qū)ι鲜鰣?chǎng)景中的每一個(gè)以及其他場(chǎng)景實(shí)現(xiàn)單獨(dú)的解決方案,但是這些單獨(dú)的解決方案可能是代價(jià)高的且可導(dǎo)致不希望的STM系統(tǒng)架構(gòu)。希望允許各種各樣的編程場(chǎng)景被支持的具有統(tǒng)一且高效的解決方案的STM系統(tǒng)。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容是為了以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本概述并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。一種軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)實(shí)現(xiàn)了輕量的基于鍵的動(dòng)作框架。該框架包括由 STM庫(kù)展示的一組統(tǒng)一的應(yīng)用編程接口(API),該組統(tǒng)一的應(yīng)用編程接口允許客戶端(例如程序員和/或編譯器)實(shí)現(xiàn)可由STM代碼中的事務(wù)或事務(wù)嵌套使用特定鍵來注冊(cè)、查詢和更新的動(dòng)作。每個(gè)動(dòng)作包括鍵、狀態(tài)信息以及可被掛鉤到事務(wù)執(zhí)行的驗(yàn)證、提交、中止、和/ 或重新執(zhí)行階段的一組一個(gè)或多個(gè)回調(diào)。動(dòng)作用定制的控制邏輯擴(kuò)展STM系統(tǒng)的內(nèi)建并發(fā)控制,支持事務(wù)嵌套語(yǔ)義,以及允許與垃圾收集系統(tǒng)的集成。STM系統(tǒng)可使用該動(dòng)作框架來用一致性和高效性解決一個(gè)或多個(gè)STM編程場(chǎng)景。
包括附圖來提供了對(duì)各實(shí)施例的進(jìn)一步理解,且這些附圖被合并在本發(fā)明書內(nèi)并構(gòu)成其一部分。附圖示出各實(shí)施例,并且與說明書一起用于解釋本發(fā)明的原理。其他實(shí)施例和各實(shí)施例的許多預(yù)期優(yōu)點(diǎn)將隨著參考下面的詳細(xì)描述進(jìn)行更好的理解而得到認(rèn)識(shí)。附圖的元素不一定相對(duì)于彼此而縮放。相同的附圖標(biāo)記指代對(duì)應(yīng)的類似部分。圖1是示出軟件事務(wù)存儲(chǔ)器系統(tǒng)的實(shí)施例的框圖。圖2是示出用于在STM系統(tǒng)中查詢、注冊(cè)和更新動(dòng)作的方法的實(shí)施例的流程圖。圖3是示出在事務(wù)執(zhí)行階段調(diào)用由動(dòng)作實(shí)現(xiàn)的回調(diào)的方法的實(shí)施例的流程圖。圖4是示出具有被配置成編譯具有軟件事務(wù)存儲(chǔ)器事務(wù)的源代碼的編譯器的編譯系統(tǒng)的實(shí)施例的框圖。圖5是示出被配置成實(shí)現(xiàn)軟件事務(wù)存儲(chǔ)器系統(tǒng)的計(jì)算機(jī)系統(tǒng)的實(shí)施例的框圖。
具體實(shí)施例方式在以下詳細(xì)描述中,對(duì)附圖進(jìn)行了參考,附圖構(gòu)成了實(shí)施例的一部分且在其中作為示例示出了可在其中實(shí)踐本發(fā)明的各特定實(shí)施例。就此,諸如“頂部”、“底部”、“前方”、 “后方”、“前導(dǎo)”、“尾部”等的方向性術(shù)語(yǔ)參考正在描述的附圖的方向來使用。因?yàn)閷?shí)施例的各組件可位于多個(gè)不同的方向,所以方向性術(shù)語(yǔ)出于說明的目的來使用而不是限制??梢岳斫猓梢允褂闷渌鼘?shí)施例并且可以做出結(jié)構(gòu)上或邏輯上的改變而不背離本發(fā)明的范圍。 因此,以下詳細(xì)描述并不旨在限制,并且本發(fā)明的范圍由所附權(quán)利要求來限定。應(yīng)該理解, 此處描述的各示例性實(shí)施例的特征可相互組合,除非另外具體注明。圖1是示出軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)10的實(shí)施例的框圖。STM系統(tǒng)10表示如圖5中示出且在下文中更詳細(xì)地描述的計(jì)算機(jī)系統(tǒng)100等計(jì)算機(jī)系統(tǒng)中的運(yùn)行時(shí)操作模式,其中該計(jì)算機(jī)系統(tǒng)正在執(zhí)行STM代碼12的指令。如下文更為詳細(xì)地描述的那樣,STM系統(tǒng)10實(shí)現(xiàn)輕量的基于鍵的動(dòng)作框架。STM系統(tǒng)10包括STM庫(kù)14和用于執(zhí)行STM代碼12的運(yùn)行時(shí)環(huán)境16。STM系統(tǒng) 10被配置成管理構(gòu)成STM代碼12中的原子塊的STM事務(wù)20的執(zhí)行,以允許事務(wù)被原子地執(zhí)行,且如果需要?jiǎng)t回滾或撤銷由事務(wù)20作出的改變。為此,如由箭頭36所示,對(duì)每個(gè)正在執(zhí)行的事務(wù)20,STM系統(tǒng)10使用日志34來跟蹤事務(wù)20對(duì)對(duì)象30的存儲(chǔ)器訪問。運(yùn)行時(shí)環(huán)境16可以是運(yùn)行時(shí)庫(kù)、虛擬機(jī)(VM)、諸如圖5中所示且在下文更詳細(xì)描述的OS 122所提供的功能之類的操作系統(tǒng)(OS)功能、和/或諸如圖4和5所示且在下文更詳細(xì)描述的編譯器92所提供的功能之類的編譯器功能的任何適當(dāng)?shù)慕M合。STM代碼12包括一組一個(gè)或多個(gè)事務(wù)20以及任何合適的非事務(wù)代碼。每個(gè)事務(wù) 20包括被設(shè)計(jì)成原子地執(zhí)行的指令序列,即就好像該序列與STM代碼12中的其他事務(wù)和非事務(wù)代碼隔離地執(zhí)行。每個(gè)事務(wù)20包括原子塊命名符22或其他合適的句法,指示出STM 代碼12的相應(yīng)部分是事務(wù)20。事務(wù)20還包括對(duì)STM原語(yǔ)的調(diào)用沈,可由諸如圖4和5中所示且在下文中更詳細(xì)描述的編譯器92之類的編譯器添加,調(diào)用STM庫(kù)14中的功能。如功能調(diào)用與返回觀所指示的,STM庫(kù)14的STM原語(yǔ)將結(jié)果返回給事務(wù)20。此外,每個(gè)事務(wù) 20包括如由箭頭32所示的從一個(gè)或多個(gè)對(duì)象30讀取和/或?qū)懭胍粋€(gè)或多個(gè)對(duì)象30的零個(gè)或多個(gè)存儲(chǔ)器訪問M,和/或一個(gè)或多個(gè)靜態(tài)(未示出)。STM代碼12可在該組事務(wù)20中包括一個(gè)或多個(gè)嵌套的事務(wù)。嵌套的事務(wù)是由另一事務(wù)20,即父事務(wù),調(diào)用的事務(wù)20。父事務(wù)和由父事務(wù)調(diào)用或源自父事務(wù)的調(diào)用的任何事務(wù)20構(gòu)成事務(wù)嵌套。STM庫(kù)14包括STM原語(yǔ)和可由計(jì)算機(jī)系統(tǒng)結(jié)合運(yùn)行時(shí)環(huán)境16執(zhí)行的用以實(shí)現(xiàn)STM系統(tǒng)10的指令。STM庫(kù)14的可由事務(wù)20調(diào)用的STM原語(yǔ)可包括實(shí)現(xiàn)STM庫(kù)14中的開始、 提交、中止、重試功能的管理原語(yǔ)。事務(wù)20調(diào)用開始功能以發(fā)起STM庫(kù)14對(duì)事務(wù)20的管理。事務(wù)20調(diào)用提交功能以(如果成功的話)在存儲(chǔ)器系統(tǒng)204中最終化事務(wù)20的結(jié)果。 事務(wù)20調(diào)用中止功能以回滾或撤銷存儲(chǔ)器系統(tǒng)204中事務(wù)20的結(jié)果。事務(wù)20調(diào)用重試功能以重試事務(wù)20。在其他實(shí)施例中,STM庫(kù)14執(zhí)行的某些或全部功能可被包括在運(yùn)行時(shí)環(huán)境16中或由諸如圖4和5所示的編譯器92之類的編譯器添加到事務(wù)20中。
STM庫(kù)14的可由事務(wù)20調(diào)用的STM原語(yǔ)還包括管理對(duì)由事務(wù)寫和/或讀的對(duì)象 30的訪問的存儲(chǔ)器訪問原語(yǔ)。存儲(chǔ)器訪問原語(yǔ)訪問每個(gè)對(duì)象30的一組一個(gè)或多個(gè)事務(wù)鎖 39。在一個(gè)實(shí)施例中,STM系統(tǒng)10使用對(duì)象30的對(duì)象頭來存儲(chǔ)相應(yīng)的事務(wù)鎖39。每個(gè)事務(wù)鎖39指示出相應(yīng)的對(duì)象30或相應(yīng)的對(duì)象30的一部分對(duì)于事務(wù)20進(jìn)行的寫和/或讀來說是鎖定的還是解鎖的。在一個(gè)實(shí)施例中,當(dāng)對(duì)象30對(duì)于寫是鎖定時(shí),相應(yīng)的事務(wù)鎖39包括在寫日志34W中定位對(duì)象30的條目的地址或其他引用。當(dāng)對(duì)象30對(duì)于寫是解鎖時(shí),相應(yīng)的事務(wù)鎖39包括對(duì)象30的版本號(hào)。 對(duì)于每個(gè)非數(shù)組對(duì)象30,存儲(chǔ)器訪問原語(yǔ)可訪問對(duì)事務(wù)20進(jìn)行的寫和/或讀鎖定或解鎖非數(shù)組對(duì)象30的單個(gè)事務(wù)鎖39。對(duì)于每個(gè)數(shù)組對(duì)象30,存儲(chǔ)器訪問原語(yǔ)可訪問一組一個(gè)或多個(gè)事務(wù)鎖39,其中該組中的每個(gè)事務(wù)鎖39對(duì)寫和/或讀鎖定或解鎖該數(shù)組對(duì)象 30的相應(yīng)部分。運(yùn)行時(shí)環(huán)境16為每個(gè)對(duì)象30創(chuàng)建并管理事務(wù)鎖39。STM庫(kù)14的存儲(chǔ)器訪問原語(yǔ)為當(dāng)前正被執(zhí)行的每個(gè)事務(wù)生成并管理一組一個(gè)或多個(gè)STM日志;34。在一個(gè)實(shí)施例中,每一組STM日志;34包括寫日志34W和讀日志!MR。每個(gè)寫日志34W包括用于每個(gè)對(duì)象30的由事務(wù)20寫入的條目,其中每個(gè)條目包括相應(yīng)的對(duì)象30的地址、來自相應(yīng)的對(duì)象30的事務(wù)鎖39的版本號(hào)、以及定位相應(yīng)的對(duì)象30影子副本的地址或其他引用。每個(gè)讀日志34R包括用于每個(gè)對(duì)象30的由事務(wù)20讀取的條目,其中每個(gè)條目包括定位相應(yīng)的對(duì)象30的事務(wù)鎖39的引用。STM庫(kù)14執(zhí)行下列算法或其變體以執(zhí)行每個(gè)事務(wù)20。每次事務(wù)20由執(zhí)行線程開始時(shí),STM庫(kù)14創(chuàng)建并初始化用于管理事務(wù)的變量。STM庫(kù)14然后允許事務(wù)20執(zhí)行,以及執(zhí)行如下的對(duì)對(duì)象30的任何寫和/或讀存儲(chǔ)器訪問。為了訪問對(duì)象30進(jìn)行寫,事務(wù)20調(diào)用打開對(duì)象30進(jìn)行寫的存儲(chǔ)器訪問原語(yǔ)。如果鎖可用,STM庫(kù)14為事務(wù)20獲得對(duì)應(yīng)于對(duì)象30的事務(wù)鎖39。如果對(duì)象30不可用(即對(duì)象30被另一事務(wù)20鎖定),則STM庫(kù)14檢測(cè)當(dāng)前事務(wù)20和該另一事務(wù)20之間的存儲(chǔ)器訪問沖突,并可發(fā)起事務(wù)執(zhí)行的中止階段以回滾并重新執(zhí)行當(dāng)前事務(wù)20。如果對(duì)象30被當(dāng)前事務(wù)20鎖定,則STM庫(kù)14已經(jīng)為事務(wù)20獲得了對(duì)應(yīng)于對(duì)象30的事務(wù)鎖39。一旦獲得了對(duì)應(yīng)的事務(wù)鎖39,STM庫(kù)14使得每個(gè)寫訪問32要么對(duì)對(duì)象30本身作出,要么對(duì)相應(yīng)的對(duì)象30的影子副本(未示出)作出,并使得對(duì)應(yīng)于該寫訪問32的條目被存儲(chǔ)在日志34W 中。對(duì)于非數(shù)組對(duì)象30,如果使用影子副本的話,影子副本可被存儲(chǔ)在日志34W中。對(duì)于數(shù)組對(duì)象30,如果使用共享影子副本的話,共享影子副本可與日志34W中分開存儲(chǔ)。為了訪問對(duì)象30進(jìn)行讀,事務(wù)20調(diào)用打開對(duì)象30進(jìn)行讀的存儲(chǔ)器訪問原語(yǔ)。如果對(duì)象30對(duì)于樂觀讀訪問不是寫鎖定的,則STM庫(kù)14使得對(duì)應(yīng)于該讀訪問的條目被存儲(chǔ)到讀日志34R中。如果對(duì)象30不是寫鎖定的,且對(duì)于悲觀讀訪問不超過最大數(shù)量的悲觀讀,則STM庫(kù)14在還沒有獲得對(duì)象30的事務(wù)鎖39的情況下獲得對(duì)象30的事務(wù)鎖,遞增該鎖39的悲觀讀計(jì)數(shù),并使得對(duì)應(yīng)于該讀訪問的條目被存儲(chǔ)在讀日志34R中。如果對(duì)象30 被另一事務(wù)20鎖定,則STM庫(kù)14檢測(cè)當(dāng)前事務(wù)20和該另一事務(wù)20之間的存儲(chǔ)器訪問沖突,并可發(fā)起事務(wù)執(zhí)行的中止階段以回滾并重新執(zhí)行當(dāng)前事務(wù)20。如果對(duì)象30被當(dāng)前事務(wù)20鎖定,則STM庫(kù)14可使得對(duì)應(yīng)于該讀訪問的條目被存儲(chǔ)在讀日志34R中,或在寫日志 34W中設(shè)置對(duì)應(yīng)于該對(duì)象30的標(biāo)志以指示出該對(duì)象30也曾被讀。STM庫(kù)14使得在已打開指定對(duì)象30供事務(wù)20進(jìn)行寫之前發(fā)生的讀訪問32從相應(yīng)的對(duì)象30被直接作出。STM庫(kù) 14使得在已打開指定對(duì)象30供事務(wù)20進(jìn)行寫之后發(fā)生的每個(gè)讀訪問32從相應(yīng)的對(duì)象30 被直接地作出或從相應(yīng)的影子副本被作出。在事務(wù)20完成了執(zhí)行或重新執(zhí)行之后,STM庫(kù)14執(zhí)行事務(wù)執(zhí)行的驗(yàn)證和提交階段,以確保事務(wù)20進(jìn)行的存儲(chǔ)器訪問不曾與任何其他事務(wù)20進(jìn)行的存儲(chǔ)器訪問沖突。STM 庫(kù)14通過驗(yàn)證事務(wù)20的讀訪問來確認(rèn)沒有其他事務(wù)20曾在對(duì)應(yīng)于事務(wù)20的讀訪問被執(zhí)行之后寫對(duì)應(yīng)于該讀訪問的存儲(chǔ)器位置,來執(zhí)行驗(yàn)證階段。如果STM庫(kù)14在驗(yàn)證階段檢測(cè)到當(dāng)前事務(wù)20和另一事務(wù)20之間的任何存儲(chǔ)器訪問沖突,則STM庫(kù)14可發(fā)起事務(wù)執(zhí)行的回滾階段,以回滾并重新執(zhí)行當(dāng)前事務(wù)20。STM庫(kù)14通過更新由事務(wù)20用用于存儲(chǔ)修改的影子副本修改了的任何對(duì)象30, 釋放任何事務(wù)鎖39,和/或在由事務(wù)20修改了的任何對(duì)象30的事務(wù)鎖39中存儲(chǔ)更新的版本號(hào),來執(zhí)行提交階段。在成功執(zhí)行了事務(wù)執(zhí)行的驗(yàn)證和提交階段之后,STM庫(kù)14允許事務(wù)20完成并允許致使事務(wù)20執(zhí)行的線程執(zhí)行STM代碼12中的另外的事務(wù)或非事務(wù)代碼。STM系統(tǒng)10實(shí)現(xiàn)輕量的基于鍵的動(dòng)作框架。該框架包括由STM庫(kù)14展示的一組統(tǒng)一的應(yīng)用編程接口(API),該組統(tǒng)一的應(yīng)用編程接口允許客戶端(例如程序員和/或編譯器)實(shí)現(xiàn)可由STM代碼12中的事務(wù)20或事務(wù)嵌套使用特定鍵42來注冊(cè)、查詢和更新的動(dòng)作40。每個(gè)動(dòng)作40包括鍵42、狀態(tài)信息44以及可被掛鉤到事務(wù)執(zhí)行的驗(yàn)證、提交、中止、 和/或回滾階段的一組一個(gè)或多個(gè)回調(diào)46。動(dòng)作40用定制的控制邏輯擴(kuò)展STM系統(tǒng)10的內(nèi)建并發(fā)控制,支持STM系統(tǒng)10的事務(wù)嵌套語(yǔ)義,以及允許與STM系統(tǒng)10的與垃圾收集系統(tǒng)一起操作的實(shí)施例進(jìn)行集成。STM系統(tǒng)10可使用該動(dòng)作框架來用一致性和高效性解決一個(gè)或多個(gè)STM編程場(chǎng)景。對(duì)于注冊(cè)動(dòng)作40的每個(gè)事務(wù)20,STM庫(kù)14生成動(dòng)作映射52,如由箭頭M所指示的。每個(gè)動(dòng)作映射52包括對(duì)由STM庫(kù)14響應(yīng)于來自相應(yīng)的事務(wù)20的動(dòng)作操作27而注冊(cè)的動(dòng)作40的引用。STM庫(kù)14用相關(guān)聯(lián)的鍵42來將每個(gè)動(dòng)作40注冊(cè)在事務(wù)20的相應(yīng)動(dòng)作映射52中,該鍵由事務(wù)20用動(dòng)作操作27作為參數(shù)來提供。對(duì)于不對(duì)動(dòng)作40提供鍵42 的事務(wù)20 (例如將不查詢或更新動(dòng)作40的事務(wù)20),STM庫(kù)14可用全局共享鍵42來注冊(cè)動(dòng)作40,以模仿簡(jiǎn)單的回調(diào)添加和去除功能。每個(gè)動(dòng)作40中的狀態(tài)信息44和回調(diào)46可基于動(dòng)作操作27的類型和/或事務(wù)20用動(dòng)作操作27提供的一個(gè)或多個(gè)參數(shù)。動(dòng)作操作27 可由程序員或諸如圖4和5所示的編譯器92之類的編譯器添加到事務(wù)20中。STM庫(kù)14使用鍵42來管理每個(gè)動(dòng)作映射52中的動(dòng)作40,而不是簡(jiǎn)單地將動(dòng)作40 在列表中排隊(duì)。通過這樣做,STM庫(kù)14允許事務(wù)20在事務(wù)20的整個(gè)執(zhí)行過程中查詢和更新相應(yīng)的動(dòng)作40。相應(yīng)地,狀態(tài)信息44和回調(diào)46可由事務(wù)20修改。動(dòng)作40所包含的鍵 42、狀態(tài)信息44以及回調(diào)46的組合可克服無(wú)狀態(tài)的回調(diào)基礎(chǔ)結(jié)構(gòu)的局限,而這些局限不能解決某些STM編程情形。此外,對(duì)每個(gè)鍵42使用單個(gè)動(dòng)作40可允許事務(wù)20通過避免為相同目的而添加多個(gè)回調(diào)調(diào)用來以增加的效率執(zhí)行。除了將按照實(shí)例的狀態(tài)與事務(wù)20相關(guān)聯(lián),STM庫(kù)14還可生成將實(shí)例標(biāo)識(shí)符信息與設(shè)施(facility)標(biāo)識(shí)符信息相組合的鍵42。通過這樣做,STM庫(kù)14允許多個(gè)動(dòng)作40向同一個(gè)設(shè)施或跨不同的設(shè)施注冊(cè),并消除了使用對(duì)象地址作為用于不同目的(例如影子副本管理和監(jiān)視鎖管理)的鍵42的動(dòng)作40之間的歧義。此外,STM庫(kù)14防止一個(gè)設(shè)施訪問由一不同設(shè)施維護(hù)的狀態(tài)(即動(dòng)作40)。結(jié)果,STM庫(kù)14的動(dòng)作框架可以安全的方式展示給用戶。圖2是示出用于在STM系統(tǒng)10中查詢、注冊(cè)和更新動(dòng)作40的方法的實(shí)施例的流程圖。響應(yīng)于框62中所指示的來自事務(wù)20的動(dòng)作操作27,如果具有相關(guān)聯(lián)的鍵42的動(dòng)作 40在動(dòng)作映射52中沒有被找到,則STM庫(kù)14在事務(wù)20的動(dòng)作映射52中用鍵42、狀態(tài)信息44和回調(diào)46注冊(cè)新動(dòng)作40,如框64和66所指示的。如果在動(dòng)作映射52中找到具有相關(guān)聯(lián)鍵42的現(xiàn)有動(dòng)作40,則STM庫(kù)14可將現(xiàn)有動(dòng)作40返回給事務(wù)20供查詢,和/或基于事務(wù)20用動(dòng)作操作27提供的一個(gè)或多個(gè)參數(shù)來更新動(dòng)作40中的狀態(tài)信息和回調(diào)46,如框 64和68所指示的。STM系統(tǒng)14在事務(wù)20的事務(wù)執(zhí)行的每個(gè)階段訪問事務(wù)20的動(dòng)作映射52,以標(biāo)識(shí)具有與事務(wù)執(zhí)行階段相關(guān)聯(lián)的回調(diào)46的動(dòng)作40。圖3是示出在事務(wù)執(zhí)行階段調(diào)用由動(dòng)作 40實(shí)現(xiàn)的回調(diào)46的方法的實(shí)施例的流程圖。響應(yīng)于到達(dá)如框72所指示的事務(wù)20的事務(wù)執(zhí)行階段,STM庫(kù)14標(biāo)識(shí)事務(wù)20的動(dòng)作映射52中具有與該事務(wù)執(zhí)行階段相關(guān)聯(lián)的回調(diào)46 的每個(gè)動(dòng)作40,如框74所指示的。如框76所指示的,對(duì)于動(dòng)作映射52中的每個(gè)動(dòng)作40, STM庫(kù)14對(duì)該事務(wù)執(zhí)行階段調(diào)用回調(diào)46 (如果有的話)。STM庫(kù)14的動(dòng)作框架API提供了允許事務(wù)20掛鉤到STM系統(tǒng)10中的三種類型的回調(diào)。回調(diào)包括事務(wù)階段回調(diào)、嵌套集成回調(diào)以及資源管理和垃圾收集集成回調(diào)。如果希望特定的行為,每個(gè)動(dòng)作40提供這些回調(diào)的定制實(shí)現(xiàn)。在一個(gè)實(shí)施例中,事務(wù)階段回調(diào)包括OrJrepareForCommit (在準(zhǔn)備好提交時(shí))、 OnCommit (在提交時(shí))以及OnRollback (在回滾時(shí))。OnPi^pareForCommit回調(diào)發(fā)生在事務(wù)20的驗(yàn)證階段期間。在驗(yàn)證階段期間,STM庫(kù)14檢測(cè)實(shí)現(xiàn)Orfr印areForCommit回調(diào)46 的任何動(dòng)作40,并調(diào)用任何這種回調(diào)46。OnPi^pareForCommit回調(diào)46允許事務(wù)20參與確定事務(wù)20是否提交或回滾并重新執(zhí)行的驗(yàn)證過程。OnCommit回調(diào)46在提交階段期間發(fā)生。在提交階段期間,STM庫(kù)14檢測(cè)實(shí)現(xiàn)OnCommit回調(diào)46的任何動(dòng)作40,并調(diào)用任何這種回調(diào)46。當(dāng)事務(wù)20中止或回滾以重新執(zhí)行時(shí),OnRollkick回調(diào)46發(fā)生在回滾階段期間。當(dāng)事務(wù)20到達(dá)中止或回滾點(diǎn)時(shí),STM庫(kù)14檢測(cè)實(shí)現(xiàn)OnRollkick回調(diào)46的任何動(dòng)作 40,并調(diào)用任何這種回調(diào)46。在其他實(shí)施例中,事務(wù)階段回調(diào)可包括與事務(wù)20的執(zhí)行的不同階段有關(guān)的其他回調(diào)46。STM庫(kù)14的動(dòng)作框架包括對(duì)動(dòng)作40的嵌套語(yǔ)義的內(nèi)建支持。事務(wù)20可用動(dòng)作操作27提供karchParenW搜索父)參數(shù),以指定當(dāng)前動(dòng)作40是與當(dāng)前活動(dòng)的最內(nèi)嵌套的事務(wù)20相關(guān)聯(lián)還是與整個(gè)事務(wù)嵌套相關(guān)聯(lián)。與事務(wù)嵌套分層結(jié)構(gòu)的緊密集成可向?qū)崿F(xiàn)動(dòng)作40的事務(wù)20提供更大的靈活性和可表達(dá)性。相應(yīng)地,事務(wù)20可為它們的動(dòng)作40選擇要么平坦要么嵌套的語(yǔ)義。
在一個(gè)實(shí)施例中,嵌套集成回調(diào)包括DeferToParentOnCommit (在提交時(shí)推遲到父)、DeferToParentOnAbort (在中止時(shí)推遲到父)、MergeToParent (合并到父)以及 SurviveOnRolIback (回滾時(shí)幸存)回調(diào)妨。DeferToParentOnCommit 和DeferToParentOnAbort回調(diào)46允許嵌套的事務(wù)20指定動(dòng)作40是在提交時(shí)被推遲至丨J 父事務(wù) 20 (DeferToParentOnCommit and DeferToParentOnAbort)還是中止 (DeferToParentOnAbort)嵌套的事務(wù)20。對(duì)于被推遲到父事務(wù)20的動(dòng)作40,STM庫(kù)14在父事務(wù)20的動(dòng)作映射52中注冊(cè)或更新相應(yīng)的動(dòng)作40。MergeT0Parent回調(diào)允許嵌套的事務(wù)20指定如何將動(dòng)作40的狀態(tài)合并到父事務(wù)20的動(dòng)作映射52中具有相同鍵42的動(dòng)作 40 (如果有的話)中。SurviveOnRolBack回調(diào)46使得在事務(wù)20回滾時(shí)動(dòng)作40被保持在動(dòng)作映射52中,而不是被刪除。在其他實(shí)施例中,嵌套集成回調(diào)可包括與嵌套的事務(wù)20有關(guān)的其他回調(diào)46。對(duì)于STM系統(tǒng)10的與垃圾收集驅(qū)動(dòng)的語(yǔ)言(如C#或Java) —起工作的實(shí)施例來說,垃圾收集與STM庫(kù)14的集成確保了正確性。如果STM系統(tǒng)10保持對(duì)由垃圾收集器管理的存儲(chǔ)器位置的引用,則STM系統(tǒng)10將該引用報(bào)告給垃圾收集器,使得該應(yīng)用可在垃圾收集期間被正確地更新。由于動(dòng)作40可保持受管理的引用,STM庫(kù)14提供了垃圾收集掛鉤以使得動(dòng)作40向垃圾收集器報(bào)告任何引用。在一個(gè)實(shí)施例中,資源管理和垃圾收集集成回調(diào)包括Release(釋放)和 OnGC^can(在垃圾收集掃描時(shí))回調(diào)46。Release回調(diào)46發(fā)生在提交階段期間,其中STM 庫(kù)14允許事務(wù)20釋放資源。OnGC^can回調(diào)46發(fā)生在垃圾收集期間,以允許STM庫(kù)14向垃圾收集器報(bào)告動(dòng)作40中的引用。在其他實(shí)施例中,資源管理和垃圾收集集成回調(diào)可包括與資源管理和垃圾收集有關(guān)的其他回調(diào)46。STM庫(kù)14使用該動(dòng)作框架來解決一個(gè)或多個(gè)STM編程情形,例如支持在事務(wù)20中對(duì)線程本地存儲(chǔ)器的使用、在事物鎖和傳統(tǒng)鎖之間提供互操作、在事務(wù)20中支持靜態(tài)類初始化器和模塊化初始化器、允許在事物20內(nèi)的軟件鎖省略(software lock elision)、以及提供定制的抽象并發(fā)控制。根據(jù)定義,線程本地存儲(chǔ)器(即本地變量、線程靜態(tài)字段等)僅將由一擁有線程 (owning thread)訪問。相應(yīng)地,可不使用STM庫(kù)14的標(biāo)準(zhǔn)STM存儲(chǔ)器并發(fā)控制邏輯(例如日志34)來管理線程本地存儲(chǔ)器。然而,為了支持故障原子性,STM庫(kù)14備份事務(wù)20 使用的任何線程本地存儲(chǔ)器的初始值,使得如果事務(wù)20不成功(即回滾或被中止),則這些初始值可被恢復(fù)。STM庫(kù)14通過與byref分析組合來處理跨方法邊界的指針到本地 (pointer-to-locals)(包括結(jié)構(gòu)類型)。STM庫(kù)14可被配置成使用該動(dòng)作框架來處理事務(wù)20進(jìn)行的線程本地存儲(chǔ)器訪問, 來實(shí)現(xiàn)存儲(chǔ)器撤銷動(dòng)作40。對(duì)于每個(gè)線程本地存儲(chǔ)器區(qū)域,如果該區(qū)域可被修改,則存儲(chǔ)器撤銷動(dòng)作40將該線程本地存儲(chǔ)器區(qū)域的初始值進(jìn)行高速緩存,在事務(wù)20被回滾或中止的情況下恢復(fù)初始值。存儲(chǔ)器撤銷動(dòng)作40使用線程本地存儲(chǔ)器區(qū)域的基地址作為鍵42。通過這樣做,STM庫(kù)14可每線程本地存儲(chǔ)器區(qū)域注冊(cè)單個(gè)存儲(chǔ)器撤銷動(dòng)作40,并且如果事務(wù) 20不成功,則每線程本地存儲(chǔ)器區(qū)域執(zhí)行單個(gè)撤銷動(dòng)作。結(jié)果,STM庫(kù)14可處理線程本地存儲(chǔ)器訪問而無(wú)需為相同的線程本地存儲(chǔ)器區(qū)域注冊(cè)多個(gè)動(dòng)作40。STM庫(kù)14用每事務(wù)的范圍來實(shí)現(xiàn)存儲(chǔ)器撤銷動(dòng)作40,且不將存儲(chǔ)器撤銷動(dòng)作40合并到父事務(wù)20中。每個(gè)事務(wù)20在事務(wù)20開始前為被訪問的本地存儲(chǔ)器區(qū)域注冊(cè)一組存儲(chǔ)器撤銷動(dòng)作。這允許在嵌套的事務(wù)20回滾或中止時(shí)線程本地存儲(chǔ)器的部分回滾。STM庫(kù)14還可被配置成使用該動(dòng)作框架在事務(wù)鎖和傳統(tǒng)鎖之間提供互操作。通過這樣做,STM庫(kù)14可在STM系統(tǒng)10與STM代碼12中的任何非事務(wù)代碼之間提供增加的兼容性和可組成性。為了在STM代碼12中的事務(wù)20和非事務(wù)代碼之間提供隔離,STM庫(kù)14 注冊(cè)鎖互操作動(dòng)作40,以使得事務(wù)20保持事務(wù)20所取得的每個(gè)鎖39,直到包括該事務(wù)20 的整個(gè)事務(wù)嵌套成功提交為止。鎖互操作動(dòng)作40使得鎖39被保持,即使在事務(wù)20或事務(wù)嵌套內(nèi)有解鎖操作。由于STM庫(kù)14使用鍵42來查詢每個(gè)鎖互操作動(dòng)作40且鎖釋放被推遲直到整個(gè)事務(wù)嵌套成功提交為止,鎖互操作動(dòng)作40允許在事務(wù)嵌套中為每個(gè)鎖39執(zhí)行單個(gè)物理鎖操作。STM庫(kù)14更新鎖互操作動(dòng)作40以維護(hù)鎖定和解鎖遞歸計(jì)數(shù),以允許在事務(wù)20中止或事務(wù)嵌套提交時(shí)鎖操作被補(bǔ)償。STM庫(kù)14用每事務(wù)的范圍來實(shí)現(xiàn)鎖互操作動(dòng)作40,但在中止或提交時(shí)將鎖互操作動(dòng)作40合并到任何父事務(wù)20。當(dāng)具有一個(gè)或多個(gè)鎖互操作動(dòng)作40的事務(wù)20提交時(shí),STM庫(kù)14基于遞歸計(jì)數(shù)來執(zhí)行推遲的鎖操作,以正確地設(shè)置鎖39的狀態(tài)。如果具有一個(gè)或多個(gè)鎖互操作動(dòng)作40的事務(wù)20中止,則STM庫(kù)14通過對(duì)每個(gè)獲得的鎖執(zhí)行相應(yīng)的鎖釋放操作來補(bǔ)償任何獲得的鎖。由于鎖釋放被推遲直到事務(wù)嵌套提交為止,當(dāng)事務(wù)20中止時(shí),STM庫(kù)14忽略任何鎖釋放。對(duì)鎖互操作動(dòng)作40的使用的附加細(xì)節(jié)可在同時(shí)提交的題為“COMPOSITION OF LOCKS IN SOFTWARE TRANSACTIONAL MEMORY(軟件事務(wù)存儲(chǔ)器中的鎖的組成)”的美國(guó)專利申請(qǐng)?zhí)朹、代理人檔案號(hào)327945. 01中找到,該申請(qǐng)通過引用被整體上結(jié)合于此。此外,STM庫(kù)14可被配置成使用該動(dòng)作框架在事務(wù)20中支持靜態(tài)類初始化器和模塊化初始化器。在諸如微軟.NET或Java虛擬機(jī)之類的系統(tǒng)中,僅允許一個(gè)線程執(zhí)行某一個(gè)類的靜態(tài)類初始化或某一個(gè)模塊的模塊化初始化。為了避免這種初始化中的潛在的數(shù)據(jù)競(jìng)爭(zhēng),每當(dāng)在事務(wù)20中遇到初始化器時(shí),STM庫(kù)14注冊(cè)初始化器動(dòng)作40,并立即回滾并重新執(zhí)行事務(wù)20。初始化器動(dòng)作40實(shí)現(xiàn)OnRollkick (在回滾時(shí))回調(diào)46,該回調(diào)是在STM 庫(kù)14回滾事務(wù)時(shí)被調(diào)用的。初始化器動(dòng)作40的OnRollhck回調(diào)46在事務(wù)被重新執(zhí)行之前執(zhí)行預(yù)期的初始化。初始化器動(dòng)作40具有事務(wù)嵌套范圍,即整個(gè)事務(wù)嵌套僅具有每初始化器單個(gè)初始化器動(dòng)作40。STM庫(kù)14可進(jìn)一步使用該動(dòng)作框架來允許事務(wù)20內(nèi)的軟件鎖省略(elision)。 軟件鎖省略是一種優(yōu)化技術(shù),它依賴于大多數(shù)時(shí)間鎖操作(如對(duì)象30上的讀鎖和寫鎖)上都不會(huì)發(fā)生爭(zhēng)用的假設(shè)。對(duì)于事務(wù)20的每個(gè)鎖操作,STM庫(kù)14注冊(cè)鎖省略動(dòng)作40,該鎖省略動(dòng)作捕捉對(duì)象30的鎖39的當(dāng)前狀態(tài),并推測(cè)性地執(zhí)行事務(wù)20而不用實(shí)際鎖定對(duì)象30。 在驗(yàn)證階段期間,STM庫(kù)14對(duì)每個(gè)鎖省略動(dòng)作40調(diào)用Onft^pareForCommit回調(diào)46,以確定相應(yīng)的鎖39是否已改變。如果任何鎖39已改變,則STM庫(kù)14使得事務(wù)20回滾并重新執(zhí)行。STM庫(kù)14用每事務(wù)的范圍來實(shí)現(xiàn)鎖省略動(dòng)作40,但在中止或提交時(shí)將鎖省略動(dòng)作40 合并到任何父事務(wù)20。STM庫(kù)14還可使用該動(dòng)作框架來向程序員提供定制的抽象并發(fā)控制。有時(shí),STM 庫(kù)14檢測(cè)到的低級(jí)讀和寫的沖突可能是假?zèng)_突。例如,在基于鏈的散列表中,插入操作觸及鏈表中的桶頭部和條目一直到散列表中的合適位置。該插入操作將與更新桶或任一條目的任何事務(wù)20沖突,即使語(yǔ)義上不相交的條目實(shí)際上正被訪問。為了避免這種假?zèng)_突,程序員可放棄STM庫(kù)14提供的低級(jí)存儲(chǔ)器并發(fā)控制(例如通過抑制并發(fā)控制或通過使用開放嵌套),以及使用該動(dòng)作框架提供的高級(jí)抽象并發(fā)控制來管理它們的數(shù)據(jù)結(jié)構(gòu)。STM庫(kù)14實(shí)現(xiàn)一個(gè)或多個(gè)定制的控制動(dòng)作40來允許程序員向定制的并發(fā)控制算法提供回調(diào)信息46。定制的控制動(dòng)作40可使用Orfr印areForCommit回調(diào)46來影響關(guān)于事務(wù)20是否可被提交的判定,可使用OnCommit回調(diào)46來驅(qū)逐事務(wù)20中被拖延的任何推遲的效果,以及可使用OnRollhck回調(diào)46來提供任何補(bǔ)償動(dòng)作。如果希望嵌套語(yǔ)義,則可使用 DeferToParentOnCommit> DeferToParentOnAbort、MergeToParent 禾口 SurviveOnRollback 回調(diào)信息46來表達(dá)所希望的行為。圖4是示出具有被配置成編譯具有STM事務(wù)20的源代碼94的編譯器92的編譯系統(tǒng)90的實(shí)施例的框圖。編譯器系統(tǒng)90表示如圖5中示出且在下文中更詳細(xì)地描述的計(jì)算機(jī)系統(tǒng)100等計(jì)算機(jī)系統(tǒng)中的操作的編譯模式,其中該計(jì)算機(jī)系統(tǒng)正在執(zhí)行將代碼94編譯成STM代碼12 的指令。在一個(gè)實(shí)施例中,編譯器系統(tǒng)90包括結(jié)合由諸如圖5中所示且在下文中更詳細(xì)描述的OS 122之類的操作系統(tǒng)(OS)所執(zhí)行的運(yùn)行時(shí)環(huán)境、STM庫(kù)14以及任何附加的運(yùn)行庫(kù) (未示出)在計(jì)算機(jī)系統(tǒng)中操作的即時(shí)(JIT)編譯器系統(tǒng)。在另一實(shí)施例中,編譯器系統(tǒng) 90包括產(chǎn)生STM代碼12供在同一或不同計(jì)算機(jī)系統(tǒng)上執(zhí)行的獨(dú)立編譯器系統(tǒng)。代碼94包括一組一個(gè)或多個(gè)STM事務(wù)20。每個(gè)STM事務(wù)20包括原子塊命名符 22,向編譯器92指示出代碼94的相應(yīng)部分是STM事務(wù)20。每個(gè)STM事務(wù)20可包括從對(duì)象30進(jìn)行讀和/或?qū)?duì)象30進(jìn)行寫的零個(gè)或多個(gè)存儲(chǔ)器訪問M。每個(gè)STM事務(wù)20還可包括生成、查詢或更新動(dòng)作40的零個(gè)或多個(gè)動(dòng)作操作27 (未示出)。代碼94可以是用諸如 Java或0#之類的語(yǔ)言或諸如公共中間語(yǔ)言(CIL)、微軟中間語(yǔ)言(MSIL)或Java字節(jié)碼之類的任何合適的字節(jié)碼來編寫的任何合適的源代碼。編譯器92訪問或以其他方式接收具有包括存儲(chǔ)器訪問M的事務(wù)20的代碼94。 編譯器92標(biāo)識(shí)存儲(chǔ)器訪問M并將代碼94編譯成對(duì)每個(gè)存儲(chǔ)器訪問M具有STM庫(kù)14中的STM原語(yǔ)的調(diào)用沈的STM代碼12。編譯器92還可標(biāo)識(shí)可在其中使用動(dòng)作40的實(shí)例,并將代碼94編譯成對(duì)其中可使用動(dòng)作40的每個(gè)實(shí)例具有動(dòng)作操作27的STM代碼12。編譯器92執(zhí)行從代碼94的指令集到可由指定的計(jì)算機(jī)系統(tǒng)執(zhí)行的一組指令的任何所希望的轉(zhuǎn)換,并將該組指令包括在STM代碼12中。圖5是示出被配置成實(shí)現(xiàn)STM系統(tǒng)10的計(jì)算機(jī)系統(tǒng)100的實(shí)施例的框圖。計(jì)算機(jī)系統(tǒng)100包括一個(gè)或多個(gè)處理器封裝102、存儲(chǔ)器系統(tǒng)104、零個(gè)或更多輸入/輸出設(shè)備106、零個(gè)或更多顯示設(shè)備108、零個(gè)或更多外圍設(shè)備110、和零個(gè)或更多網(wǎng)絡(luò)設(shè)備112。處理器封裝102、存儲(chǔ)器系統(tǒng)104、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備 110和網(wǎng)絡(luò)設(shè)備112使用包括任何合適的類型、數(shù)量和配置的控制器、總線、接口、和/或其他有線或無(wú)線連接的一組互連114來進(jìn)行通信。計(jì)算機(jī)系統(tǒng)100表示出于通用或?qū)S媚康亩渲玫娜魏魏线m的處理設(shè)備。計(jì)算機(jī)系統(tǒng)100的示例包括服務(wù)器、個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、圖形輸入板計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、移動(dòng)電話、和音頻/視頻設(shè)備。計(jì)算機(jī)系統(tǒng)100的組件(即,處理器封裝102、存儲(chǔ)器系統(tǒng)104、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110、網(wǎng)絡(luò)設(shè)備112和互連114)可包含在公共外殼(未示出)中或任何合適數(shù)量的獨(dú)立外殼(未示出)中。處理器封裝102各自可包括一個(gè)或多個(gè)執(zhí)行核。每個(gè)執(zhí)行核被配置成訪問并執(zhí)行存儲(chǔ)在存儲(chǔ)器系統(tǒng)104中的指令。指令可包括基本輸入輸出系統(tǒng)¢10 或固件(未示出)、操作系統(tǒng)(0S)122、STM代碼12、STM庫(kù)14、運(yùn)行時(shí)環(huán)境16、編譯器92以及代碼94。每一執(zhí)行核可結(jié)合或響應(yīng)于從輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110、和/或網(wǎng)絡(luò)設(shè)備112接收到的信息來執(zhí)行指令。計(jì)算機(jī)系統(tǒng)100引導(dǎo)并執(zhí)行OS 122。OS 122包括可由執(zhí)行核執(zhí)行來管理計(jì)算機(jī)系統(tǒng)100的組件并提供允許程序訪問并使用這些組件的一組功能的指令。OS 122執(zhí)行運(yùn)行時(shí)環(huán)境16以允許STM代碼12和STM庫(kù)被執(zhí)行。在一個(gè)實(shí)施例中,OS 122是Windows操作系統(tǒng)。在其他實(shí)施例中,OS 122是適于和計(jì)算機(jī)系統(tǒng)100—起使用的另一操作系統(tǒng)。計(jì)算機(jī)系統(tǒng)100執(zhí)行編譯器92來從代碼94生成STM代碼12。編譯器92訪問或以其他方式接收代碼94,并將代碼94轉(zhuǎn)換成STM代碼12供計(jì)算機(jī)系統(tǒng)100執(zhí)行。編譯器 92執(zhí)行從代碼94的指令集到可由計(jì)算機(jī)系統(tǒng)100執(zhí)行的一組指令的任何所希望的轉(zhuǎn)換,并將該組指令包括在STM代碼12中。編譯器92還從事務(wù)命名符22標(biāo)識(shí)代碼94中的塊20, 并修改STM代碼12中的塊20以包括對(duì)STM原語(yǔ)沈的調(diào)用。在一個(gè)實(shí)施例中,編譯器92包括結(jié)合OS 122、運(yùn)行時(shí)環(huán)境16以及STM庫(kù)14在計(jì)算機(jī)系統(tǒng)100中操作的即時(shí)(JIT)編譯器。在另一實(shí)施例中,編譯器92包括產(chǎn)生STM代碼 12供在計(jì)算機(jī)系統(tǒng)100或另一計(jì)算機(jī)系統(tǒng)(未示出)上執(zhí)行的獨(dú)立編譯器。計(jì)算機(jī)系統(tǒng)100執(zhí)行運(yùn)行時(shí)環(huán)境16和STM庫(kù)14來允許STM代碼12以及其中的事務(wù)20如上所述地在計(jì)算機(jī)系統(tǒng)100中被執(zhí)行。存儲(chǔ)器系統(tǒng)104包括被配置成存儲(chǔ)指令和數(shù)據(jù)的任何合適的類型、數(shù)量和配置的易失性或非易失性存儲(chǔ)設(shè)備。存儲(chǔ)器系統(tǒng)104的存儲(chǔ)設(shè)備表示存儲(chǔ)包括STM代碼12、STM 庫(kù)14、運(yùn)行時(shí)環(huán)境16、0S 122、編譯器92以及代碼94的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。指令可由計(jì)算機(jī)系統(tǒng)100執(zhí)行來執(zhí)行如此處所述的STM代碼12、STM庫(kù)14、運(yùn)行時(shí)環(huán)境16、OS 122、編譯器92以及代碼94的功能和方法。存儲(chǔ)器系統(tǒng)104存儲(chǔ)從處理器封裝102、輸入/輸出設(shè)備106、顯示設(shè)備108、外圍設(shè)備110和網(wǎng)絡(luò)設(shè)備112接收的指令和數(shù)據(jù)。存儲(chǔ)器系統(tǒng)104將存儲(chǔ)的指令和數(shù)據(jù)提供給處理器封裝102、輸入/輸出設(shè)備106、 顯示設(shè)備108、外圍設(shè)備110和網(wǎng)絡(luò)設(shè)備112。存儲(chǔ)器系統(tǒng)104中的存儲(chǔ)設(shè)備的示例包括硬盤驅(qū)動(dòng)器、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、閃存驅(qū)動(dòng)器和卡、以及諸如磁盤和CD 和DVD之類的光盤。輸入/輸出設(shè)備106包括被配置成將指令或數(shù)據(jù)從用戶輸入到計(jì)算機(jī)系統(tǒng)100并將指令或數(shù)據(jù)從計(jì)算機(jī)系統(tǒng)100輸出到用戶的任何合適的類型、數(shù)量和配置的輸入/輸出設(shè)備。輸入/輸出設(shè)備106的示例包括鍵盤、鼠標(biāo)、觸摸墊、觸摸屏、按鈕、撥盤、旋鈕和開關(guān)。顯示設(shè)備108包括被配置成向計(jì)算機(jī)系統(tǒng)100的用戶輸出文本和/或圖形信息的任何合適的類型、數(shù)量和配置的顯示設(shè)備。顯示設(shè)備108的示例包括監(jiān)視器、顯示屏和投影儀。外圍設(shè)備110包括被配置成用計(jì)算機(jī)系統(tǒng)100中的一個(gè)或多個(gè)其他組件來操作以執(zhí)行通用或?qū)S锰幚砉δ艿娜魏魏线m的類型、數(shù)量和配置的外圍設(shè)備。網(wǎng)絡(luò)設(shè)備112包括被配置成允許計(jì)算機(jī)系統(tǒng)100通過一個(gè)或多個(gè)網(wǎng)絡(luò)(未示出)進(jìn)行通信的任何合適的類型、數(shù)量和配置的網(wǎng)絡(luò)設(shè)備。網(wǎng)絡(luò)設(shè)備112可根據(jù)任何合適的網(wǎng)絡(luò)協(xié)議和/或配置來操作以允許計(jì)算機(jī)系統(tǒng)100將信息發(fā)送給網(wǎng)絡(luò)或者從網(wǎng)絡(luò)接收信息。
盡管此處說明并描述了具體實(shí)施例,但本領(lǐng)域技術(shù)人員可以理解,可用各種替換和/或等價(jià)實(shí)現(xiàn)來替換此處示出并描述的具體實(shí)施例而不背離本發(fā)明的范圍。本申請(qǐng)旨在覆蓋此處討論的具體實(shí)施例的任何改編或變型。因此,本發(fā)明旨在僅由權(quán)利要求書及其等效方案來限制。
權(quán)利要求
1.一種由軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)(10)在計(jì)算機(jī)系統(tǒng)(100)中執(zhí)行的方法,所述方法包括從STM代碼(12)中的事務(wù)00)接收具有鍵G2)的第一動(dòng)作操作;以及用所述鍵注冊(cè)對(duì)應(yīng)于所述第一動(dòng)作操作的動(dòng)作(40),所述鍵允許所述事務(wù)隨后執(zhí)行查詢和更新所述動(dòng)作中的至少一個(gè),所述動(dòng)作實(shí)現(xiàn)回調(diào)G6)。
2.如權(quán)利要求1所述的方法,還包括響應(yīng)于來自所述事務(wù)的具有所述鍵的第二動(dòng)作操作,執(zhí)行查詢和更新所述動(dòng)作中的至少一個(gè)。
3.如權(quán)利要求1所述的方法,還包括響應(yīng)于到達(dá)對(duì)應(yīng)于所述事務(wù)的事務(wù)執(zhí)行階段,調(diào)用所述動(dòng)作中的回調(diào)。
4.如權(quán)利要求4所述的方法,其特征在于,所述事務(wù)執(zhí)行階段是驗(yàn)證階段、提交階段和回滾階段中的一個(gè)。
5.如權(quán)利要求1所述的方法,還包括響應(yīng)于來自所述事務(wù)的所述第一動(dòng)作操作,生成所述事務(wù)的動(dòng)作映射。
6.如權(quán)利要求1所述的方法,還包括將所述動(dòng)作合并到所述事務(wù)的父事務(wù)的動(dòng)作映射中。
7.如權(quán)利要求1所述的方法,還包括響應(yīng)于垃圾收集,調(diào)用所述動(dòng)作中的回調(diào)。
8.一種存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(104),所述計(jì)算機(jī)可執(zhí)行指令在由計(jì)算機(jī)系統(tǒng)(100)執(zhí)行時(shí)執(zhí)行一種方法,所述方法包括從STM代碼(12)中的第一事務(wù)00)接收具有鍵G2)的第一動(dòng)作操作;如果在接收到對(duì)應(yīng)于具有所述鍵的所述第一動(dòng)作操作的第一動(dòng)作GO)時(shí)所述第一動(dòng)作還未被注冊(cè),則注冊(cè)所述第一動(dòng)作,所述第一動(dòng)作實(shí)現(xiàn)回調(diào)G6);以及如果在接收到所述第一動(dòng)作操作時(shí)所述第一動(dòng)作已被注冊(cè),則響應(yīng)于所述第一動(dòng)作操作執(zhí)行查詢和更新所述第一動(dòng)作中的至少一個(gè)。
9.如權(quán)利要求8所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述方法還包括使用所述鍵確定在接收到所述第一動(dòng)作操作時(shí)所述第一動(dòng)作是否已被注冊(cè)。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述方法還包括響應(yīng)于到達(dá)對(duì)應(yīng)于所述事務(wù)的事務(wù)執(zhí)行階段,調(diào)用所述動(dòng)作中的回調(diào)。
全文摘要
本發(fā)明涉及軟件事務(wù)存儲(chǔ)器中的動(dòng)作框架。軟件事務(wù)存儲(chǔ)器系統(tǒng)實(shí)現(xiàn)輕量的基于鍵的動(dòng)作框架。該框架包括由STM庫(kù)展示的一組統(tǒng)一的應(yīng)用編程接口(API),該組統(tǒng)一的應(yīng)用編程接口允許客戶端實(shí)現(xiàn)可由STM代碼中的事務(wù)或事務(wù)嵌套使用特定鍵來注冊(cè)、查詢和更新的動(dòng)作。每個(gè)動(dòng)作包括鍵、狀態(tài)信息以及可被掛鉤到事務(wù)執(zhí)行的驗(yàn)證、提交、中止、和/或重新執(zhí)行階段的一組一個(gè)或多個(gè)回調(diào)。動(dòng)作用定制的控制邏輯擴(kuò)展STM系統(tǒng)的內(nèi)建并發(fā)控制,支持事務(wù)嵌套語(yǔ)義,以及允許與垃圾收集系統(tǒng)的集成。
文檔編號(hào)G06F9/46GK102289387SQ201110178980
公開日2011年12月21日 申請(qǐng)日期2011年6月20日 優(yōu)先權(quán)日2010年6月21日
發(fā)明者D·L·德特勒夫斯, L·張, S·S·索迪, W·朱, Y·萊瓦諾尼 申請(qǐng)人:微軟公司