專利名稱::在事務(wù)存儲(chǔ)器系統(tǒng)中高效地定位事務(wù)代碼塊的制作方法在事務(wù)存儲(chǔ)器系統(tǒng)中髙效地定位事務(wù)代碼塊背景軟件事務(wù)存儲(chǔ)器(STM)是類似于數(shù)據(jù)庫(kù)事務(wù)的、用于在并發(fā)計(jì)算中控制對(duì)共享存儲(chǔ)器的訪問的并發(fā)控制機(jī)制。事務(wù)存儲(chǔ)器的上下文中的事務(wù)是執(zhí)行對(duì)共享存儲(chǔ)器的一系列讀取和寫入的代碼片段。STM用作傳統(tǒng)鎖定機(jī)制的替換。程序員在代碼塊周圍放置聲明性注釋(例如,原子的)以指示這些代碼塊所需要的安全特性,并且系統(tǒng)自動(dòng)保證該塊相對(duì)于其它受保護(hù)的代碼區(qū)域原子地執(zhí)行。軟件事務(wù)存儲(chǔ)器編程模型防止了基于鎖的優(yōu)先級(jí)倒置和死鎖問題。軟件事務(wù)存儲(chǔ)器(STM)系統(tǒng)可以接受某些順序程序并且允許使用事務(wù)來同時(shí)(例如并行地)執(zhí)行這些程序的各部分。這些順序程序的源代碼通常是由程序員通過使用各種類型的編程語(yǔ)言中的一種來編寫。源代碼通常被封裝在包含稍后由計(jì)算機(jī)執(zhí)行的邏輯的一個(gè)或多個(gè)函數(shù)中。此處寬泛地使用術(shù)語(yǔ)"函數(shù)"來涵蓋函數(shù)、方法、過程、語(yǔ)句塊和/或由計(jì)算機(jī)執(zhí)行的邏輯的其它部分。有了軟件事務(wù)存儲(chǔ)器系統(tǒng),可根據(jù)事務(wù)上下文來調(diào)用的每一個(gè)函數(shù)都必須具有兩個(gè)版本,一個(gè)可根據(jù)事務(wù)來調(diào)用的版本和一個(gè)可根據(jù)非事務(wù)來調(diào)用的版本。確定要調(diào)用函數(shù)的哪一個(gè)版本是上下文相關(guān)的。該確定必須在對(duì)虛函數(shù)的調(diào)用的運(yùn)行時(shí)或通過函數(shù)指針來完成。概述公開了用于在事務(wù)存儲(chǔ)器系統(tǒng)中創(chuàng)建和/或定位事務(wù)代碼塊的各種技術(shù)和方法。諸如軟件開發(fā)者等用戶可以用標(biāo)識(shí)符來裝飾特定函數(shù)以便指示該特定函數(shù)是事務(wù)安全的。然后創(chuàng)建軟件應(yīng)用程序中的被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本和事務(wù)版本。創(chuàng)建未被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本。對(duì)于被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本,普通版本中的存根指針(stubpointer)指向事務(wù)版本。然后取決于應(yīng)用程序上下文來調(diào)用函數(shù)的適當(dāng)?shù)陌姹尽T谝粋€(gè)實(shí)現(xiàn)中,編譯器生成函數(shù)的事務(wù)和非事務(wù)版本以便與事務(wù)存儲(chǔ)器系統(tǒng)一起使用。在編譯時(shí),為軟件應(yīng)用程序中的每一個(gè)函數(shù)分配存根指針。對(duì)于未被標(biāo)記未事務(wù)安全函數(shù)的每一個(gè)相應(yīng)的函數(shù),生成相應(yīng)函數(shù)的普通版本,并且用運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)來填充存根指針。對(duì)于被標(biāo)記為事務(wù)安全函數(shù)的每一個(gè)相應(yīng)5的函數(shù),創(chuàng)建是事務(wù)安全的相應(yīng)函數(shù)的普通版本和事務(wù)版本的代碼。然后,在普通版本的存根指針中,填充到事務(wù)版本的入口點(diǎn)。在事務(wù)版本的存根指針,填充到運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)。提供本概述是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本概述不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。附圖簡(jiǎn)述圖1是一個(gè)實(shí)現(xiàn)的計(jì)算機(jī)系統(tǒng)的圖示。圖2是在圖1的計(jì)算機(jī)系統(tǒng)上操作的一個(gè)實(shí)現(xiàn)的事務(wù)存儲(chǔ)器應(yīng)用程序的圖示。圖3是圖1的系統(tǒng)的一個(gè)實(shí)現(xiàn)的高級(jí)處理流程圖。圖4是圖1的系統(tǒng)的一個(gè)實(shí)現(xiàn)的處理流程圖,其示出了作為編譯和/或鏈接過程的一部分的、在使用代碼生成器來生成事務(wù)和非事務(wù)函數(shù)的代碼并填充存根指針時(shí)所涉及的各階段。圖5是圖1的系統(tǒng)的一個(gè)實(shí)現(xiàn)的示圖,其示出了用于取決于執(zhí)行上下文來選擇要調(diào)用的函數(shù)的適當(dāng)?shù)陌姹镜臎Q策樹。圖6是一個(gè)實(shí)現(xiàn)的邏輯圖,其示出了兩個(gè)假想函數(shù),一個(gè)僅具有普通版本而另一個(gè)具有普通版本和事務(wù)版本。詳細(xì)描述為促進(jìn)對(duì)本發(fā)明的原理的理解,現(xiàn)將對(duì)附圖中所示的各實(shí)施例加以參考,同時(shí)也將用具體語(yǔ)言描述它們。不過,需要理解的是,并無(wú)意由此作出范圍上的限制。對(duì)所述實(shí)施例的任何改變和進(jìn)一步更改,以及在此所述的原理的進(jìn)一步應(yīng)用都可以預(yù)期將是本領(lǐng)域技術(shù)人員通常能想到的。本系統(tǒng)可以在一般上下文中被描述為事務(wù)存儲(chǔ)器系統(tǒng),但是本系統(tǒng)還用于除此之外的其它目的。在一個(gè)實(shí)現(xiàn)中,此處所描述的一個(gè)或多個(gè)技術(shù)可被實(shí)現(xiàn)為諸如微軟⑧.NET框架等框架程序內(nèi)的、或來自為開發(fā)者提供開發(fā)軟件應(yīng)用程序的平臺(tái)任何其它類型的程序或服務(wù)的特征。在另一實(shí)現(xiàn)中,此處所描述的一個(gè)或多個(gè)技術(shù)被實(shí)現(xiàn)為涉及開發(fā)在并發(fā)環(huán)境中執(zhí)行的應(yīng)用程序的其它應(yīng)用程序的特征。在一個(gè)實(shí)現(xiàn)中,提供了通過編程創(chuàng)建被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的以下兩個(gè)版本的事務(wù)存儲(chǔ)器系統(tǒng)函數(shù)的普通版本和函數(shù)的事務(wù)版本。對(duì)于未被標(biāo)記為事務(wù)安全的函數(shù),僅創(chuàng)建普通版本并且該普通版本的入口點(diǎn)處的存根指針指向出錯(cuò)處理例程。然后,對(duì)于被標(biāo)記為事務(wù)安全的函數(shù),普通版本的入口點(diǎn)的存根指針指向函數(shù)的事務(wù)版本。該事務(wù)版本的入口點(diǎn)處的存根指針指向出錯(cuò)處理例程。對(duì)于未被標(biāo)記為事務(wù)安全的函數(shù),普通版本的入口點(diǎn)處的存根指針指向出錯(cuò)處理例程。然后取決于執(zhí)行上下文來調(diào)用函數(shù)的適當(dāng)?shù)陌姹?。如圖1所示,用于實(shí)現(xiàn)本系統(tǒng)的一個(gè)或多個(gè)部分的示例性計(jì)算機(jī)系統(tǒng)包括諸如計(jì)算設(shè)備100等計(jì)算設(shè)備。在其最基本的配置中,計(jì)算設(shè)備100通常包括至少一個(gè)處理單元102和存儲(chǔ)器104。取決于計(jì)算設(shè)備的確切配置和類型,存儲(chǔ)器104可以是易失性的(如RAM)、非易失性的(如ROM、閃存等)或是兩者的某種組合。該最基本配置在圖1中由虛線106來示出。另外,設(shè)備100還可具有附加特征/功能。例如,設(shè)備100還可包含附加存儲(chǔ)(可移動(dòng)和/或不可移動(dòng)),包括但不限于磁盤、光盤或磁帶。這樣的附加存儲(chǔ)在圖1中由可移動(dòng)存儲(chǔ)108和不可移動(dòng)存儲(chǔ)110示出。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。存儲(chǔ)器104、可移動(dòng)存儲(chǔ)108和不可移動(dòng)存儲(chǔ)110都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或者可用于存儲(chǔ)所需信息并且可由設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)都可以是設(shè)備100的一部分。計(jì)算設(shè)備100包括允許計(jì)算設(shè)備100與其它計(jì)算機(jī)/應(yīng)用程序115進(jìn)行通信的一個(gè)或多個(gè)通信連接114。設(shè)備100還可以具有諸如鍵盤、鼠標(biāo)、筆、語(yǔ)音輸入設(shè)備、觸摸輸入設(shè)備等輸入設(shè)備112。還可以包括諸如顯示器、揚(yáng)聲器、打印機(jī)等輸出設(shè)備lll。這些設(shè)備在本領(lǐng)域中公知且無(wú)需在此處詳細(xì)討論。在一個(gè)實(shí)現(xiàn)中,計(jì)算設(shè)備100包括事務(wù)存儲(chǔ)器應(yīng)用程序200。事務(wù)存儲(chǔ)器應(yīng)用程序200將在圖2中更詳細(xì)地描述?,F(xiàn)在轉(zhuǎn)向圖2,并繼續(xù)參考圖l,示出了在計(jì)算設(shè)備100上操作的事務(wù)存儲(chǔ)器應(yīng)用程序200。事務(wù)存儲(chǔ)器應(yīng)用程序200是駐留在計(jì)算設(shè)備100上的應(yīng)用程序中的一個(gè)。然而,可以理解,事務(wù)存儲(chǔ)器應(yīng)用程序200可另選地或另外地被具體化為一個(gè)或多個(gè)計(jì)算機(jī)上的計(jì)算機(jī)可執(zhí)行指令和/或與圖1所示的不同的變型。另選地或另外地,事務(wù)存儲(chǔ)器應(yīng)用程序200的一個(gè)或多個(gè)部分可以是系統(tǒng)存儲(chǔ)器104的一部7分、可以在其它計(jì)算機(jī)和/或應(yīng)用程序115上、或可以是計(jì)算機(jī)軟件領(lǐng)域的技術(shù)人員能想到的其它此類變型。事務(wù)存儲(chǔ)器應(yīng)用程序200包括負(fù)責(zé)實(shí)現(xiàn)此處所描述的技術(shù)中的部分或全部的程序邏輯204。程序邏輯204包括用于提供事務(wù)存儲(chǔ)器系統(tǒng)的邏輯206;用于允許用戶/開發(fā)者用屬性或其它標(biāo)識(shí)符來裝飾軟件應(yīng)用程序的函數(shù)以指示函數(shù)是事務(wù)安全的邏輯208;用于創(chuàng)建被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的兩個(gè)版本(例如普通版本和事務(wù)版本)的邏輯210;用于創(chuàng)建未被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的一個(gè)版本(例如普通版本)的邏輯212;用于為每一個(gè)函數(shù)分配存根指針(例如,在代碼部分的開頭之前或其它位置)的邏輯214;用于使存根指針指向正確位置(例如事務(wù)版本或運(yùn)行時(shí)出錯(cuò)處理例程)的邏輯216;以及用于操作應(yīng)用程序的其它邏輯220。在一個(gè)實(shí)現(xiàn)中,程序邏輯204可用于通過編程,如使用對(duì)程序邏輯204中的過程的單一調(diào)用而從另一程序調(diào)用?,F(xiàn)在轉(zhuǎn)向圖3-6并繼續(xù)參考圖1-2,更詳細(xì)地描述了用于實(shí)現(xiàn)事務(wù)存儲(chǔ)器應(yīng)用程序200的一個(gè)或多個(gè)實(shí)現(xiàn)的各階段。圖3是事務(wù)存儲(chǔ)器應(yīng)用程序200的高級(jí)處理流程圖。在一種形式中,圖3的過程至少部分地在計(jì)算設(shè)備100的操作邏輯中實(shí)現(xiàn)。該過程在起始點(diǎn)240處開始,在那里提供事務(wù)存儲(chǔ)器系統(tǒng)(例如,軟件事務(wù)存儲(chǔ)器系統(tǒng))(階段242)。系統(tǒng)允許用戶/開發(fā)者用屬性或其它標(biāo)識(shí)符來裝飾特定的函數(shù)以指示該函數(shù)是事務(wù)安全的(階段244)。編譯器和/或鏈接器創(chuàng)建該特定函數(shù)的兩個(gè)版本一個(gè)不用于事務(wù)的版本(例如普通版本)和一個(gè)用于事務(wù)的版本(例如事務(wù)版本)(階段246)。在普通版本中,系統(tǒng)存儲(chǔ)指向特定函數(shù)的事務(wù)版本的存根指針(階段248)。在一個(gè)實(shí)現(xiàn)中,此處所描述的存根指針被存儲(chǔ)在相應(yīng)的經(jīng)編譯的函數(shù)體文本之前。在其他實(shí)現(xiàn)中,存根指針可以被存儲(chǔ)在其它位置中,只要它與函數(shù)的相應(yīng)版本相關(guān)聯(lián)。在事務(wù)版本中,系統(tǒng)存儲(chǔ)指向運(yùn)行時(shí)出錯(cuò)處理例程的存根指針(階段249)。取決于執(zhí)行上下文來調(diào)用函數(shù)的適當(dāng)?shù)陌姹?階段250)。該過程在結(jié)束點(diǎn)252處結(jié)束。圖4示出了作為編譯和/或鏈接過程的一部分的在使用代碼生成器來生成事務(wù)和非事務(wù)函數(shù)的代碼并填充存根指針時(shí)所涉及的各階段的一個(gè)實(shí)現(xiàn)。在一種形式中,圖4的過程至少部分地用計(jì)算設(shè)備100的操作邏輯來實(shí)現(xiàn)。該過程在起始點(diǎn)270處開始,在那里代碼生成器在編譯時(shí)為每一個(gè)函數(shù)分配額外的指針(例如存根指針)(階段272)。對(duì)于每一個(gè)函數(shù)(即,在存在更多函數(shù)時(shí))(判定點(diǎn)274),執(zhí)行各種任務(wù)。例如,如果函數(shù)未被標(biāo)記為事務(wù)安全函數(shù)(判定點(diǎn)276),則系統(tǒng)運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)來填充該普通版本的存根指針(階段286)。如果函數(shù)被標(biāo)記為事務(wù)安全函數(shù)(判定點(diǎn)276),則系統(tǒng)創(chuàng)建普通版本F及其事務(wù)版本FT的代碼(階段278)。系統(tǒng)然后為函數(shù)F的事務(wù)版本和普通版本分配存根指針(階段280)。在普通版本的存根指針中,填充事務(wù)版本的入口點(diǎn)(階段282)。在事務(wù)版本的存根指針中,填充運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)(階段284)。為每一個(gè)函數(shù)適當(dāng)?shù)刂貜?fù)這些階段。然后,對(duì)于每一個(gè)調(diào)用點(diǎn),系統(tǒng)取決于上下文來作出適當(dāng)?shù)恼{(diào)用(階段288)。該調(diào)用點(diǎn)判定過程在圖5中更詳細(xì)地描述。該過程在結(jié)束點(diǎn)處290結(jié)束。現(xiàn)在轉(zhuǎn)向圖5,圖1的系統(tǒng)的一個(gè)實(shí)現(xiàn)的示圖300示出了用于取決于執(zhí)行上下文來選擇要調(diào)用的函數(shù)的適當(dāng)版本的可能的決策樹。在一種形式中,圖5的判定過程至少部分地用計(jì)算設(shè)備100的操作邏輯來實(shí)現(xiàn)。對(duì)于非事務(wù)上下文302中的直接調(diào)用306,直接調(diào)用函數(shù)的普通版本的入口點(diǎn)312。對(duì)于事務(wù)上下文304中的直接調(diào)用306,調(diào)用函數(shù)的事務(wù)版本的入口點(diǎn)314。對(duì)于非事務(wù)上下文302中的指針調(diào)用308,調(diào)用與之前相同316。對(duì)于事務(wù)上下文304中的指針調(diào)用308,通過解除函數(shù)指針值的引用來計(jì)算指向存根函數(shù)(stubfunction)的單詞的地址并然后在調(diào)用中使用該地址318。用指向事務(wù)版本的入口點(diǎn)的指針來填充該存根函數(shù)并且由此執(zhí)行正確的版本。非事務(wù)上下文302中的虛或接口調(diào)用310不受影響,并且與之前相同320。事務(wù)上下文304中的虛或接口調(diào)用310執(zhí)行虛表查找(vtableLookup),并且然后計(jì)算函數(shù)的事務(wù)版本的存根函數(shù)入口點(diǎn)322。然后使用計(jì)算出的入口點(diǎn)來作出調(diào)用。圖6是一個(gè)實(shí)現(xiàn)的邏輯圖400,其示出了兩個(gè)假想函數(shù),一個(gè)僅具有普通版本而另一個(gè)具有普通版本和事務(wù)版本。"BAR"函數(shù)402是在源代碼中未被標(biāo)記為事務(wù)安全的函數(shù)。由此,函數(shù)402的入口指針412指向出錯(cuò)處理例程410。"FOO"函數(shù)414在原始源代碼中被標(biāo)記為事務(wù)安全的,因此提供經(jīng)普通編譯的版本(普通版本)406以及事務(wù)版本408。FOO406的普通版本的入口點(diǎn)414指向FOO的事務(wù)版本408。FOO的事務(wù)版本408的入口點(diǎn)416指向出錯(cuò)處理例程410。在一個(gè)實(shí)現(xiàn)中,該出錯(cuò)處理例程被嵌入在這些函數(shù)的存根(入口點(diǎn))中以便允許在遇到不適當(dāng)?shù)氖褂脮r(shí)在運(yùn)行時(shí)捕捉錯(cuò)誤。盡管用對(duì)結(jié)構(gòu)特征和/或方法動(dòng)作專用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述具體特征或動(dòng)作。相反,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式公開的。落入在此所述和/或所附權(quán)利要求所描述的實(shí)現(xiàn)的精神的范圍內(nèi)的所有等效方案、更改和修正都期望受到保護(hù)。例如,計(jì)算機(jī)軟件領(lǐng)域普通技術(shù)人員會(huì)認(rèn)識(shí)到在此討論的示例中所述的客戶機(jī)和/或服務(wù)器布置、用戶界面屏幕內(nèi)容、和/或數(shù)據(jù)布局可在一臺(tái)或多臺(tái)計(jì)算機(jī)上不同地組織,以包括比示例中所描繪的更少或更多的選項(xiàng)或特征。權(quán)利要求1.一種具有用于使得計(jì)算機(jī)執(zhí)行以下步驟的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述步驟包括提供事務(wù)存儲(chǔ)器系統(tǒng)(206);創(chuàng)建軟件應(yīng)用程序中的被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本和事務(wù)版本(210);創(chuàng)建未被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本(212);以及對(duì)于被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本,使所述普通版本的存根指針指向所述事務(wù)版本(216)。2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述存根指針被分配在每一個(gè)函數(shù)的普通版本的代碼部分之前(214)。3.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,對(duì)于被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù),使所述普通版本的存根指針指向出錯(cuò)處理例程(216)。4.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的事務(wù)版本具有指向出錯(cuò)處理例程的存根指針(284)。5.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,未被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本具有指向出錯(cuò)處理例程的存根指針(286)。6.—種用于在事務(wù)存儲(chǔ)器系統(tǒng)中定位事務(wù)代碼塊的方法,所述方法包括以下步驟提供事務(wù)存儲(chǔ)器系統(tǒng)(242);允許用戶用標(biāo)識(shí)符來裝飾特定函數(shù)以指示該特定函數(shù)是事務(wù)安全的(244);創(chuàng)建所述特定函數(shù)的兩個(gè)版本,一個(gè)不用于事務(wù)的普通函數(shù)和一個(gè)用于事務(wù)的事務(wù)函數(shù)(246);以及將指向所述事務(wù)函數(shù)的存根指針存儲(chǔ)在所述普通函數(shù)中(248)。7.如權(quán)利要求6所述的方法,其特征在于,還包括取決于執(zhí)行上下文來調(diào)用所述特定函數(shù)的適當(dāng)?shù)陌姹?250)。8.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的直接調(diào)用的非事務(wù)上下文,則調(diào)用所述普通函數(shù)(250)。9.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的直接調(diào)用的事務(wù)上下文,則調(diào)用所述事務(wù)函數(shù)(250)。10.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的指針調(diào)用的非事務(wù)上下文,則所述指針調(diào)用照常操作(316)。11.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的指針調(diào)用的事務(wù)上下文,則通過解除函數(shù)指針值的引用來減去存根指針大小以便計(jì)算所得值,并且然后調(diào)用該所得值(318)。12.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的虛調(diào)用的非事務(wù)上下文,則所述虛調(diào)用照常操作(320)。13.如權(quán)利要求7所述的方法,其特征在于,如果所述執(zhí)行上下文是具有對(duì)所述特定函數(shù)的虛調(diào)用的事務(wù)上下文,則執(zhí)行虛表査找并且計(jì)算所述事務(wù)函數(shù)的存根指針的入口點(diǎn),并且然后使用計(jì)算出的入口點(diǎn)來作出所述虛調(diào)用(322)。14.如權(quán)利要求6所述的方法,其特征在于,所述標(biāo)識(shí)符是屬性(244)。15.如權(quán)利要求6所述的方法,其特征在于,編譯器創(chuàng)建所述特定函數(shù)的兩個(gè)版本(246)。16.如權(quán)利要求6所述的方法,其特征在于,指向所述事務(wù)函數(shù)的存根指針被存儲(chǔ)在所述普通函數(shù)的開頭(248)。17.—種具有用于使得計(jì)算機(jī)執(zhí)行如權(quán)利要求6所述的步驟的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)(200)。18.—種用于創(chuàng)建函數(shù)的事務(wù)版本和非事務(wù)版本以便在事務(wù)存儲(chǔ)器系統(tǒng)中使用的方法,所述方法包括以下步驟在編譯時(shí),為軟件應(yīng)用程序中的多個(gè)函數(shù)中的每一個(gè)函數(shù)分配一存根指針(272);對(duì)于所述多個(gè)函數(shù)中的未被標(biāo)記為事務(wù)安全的每一個(gè)相應(yīng)的函數(shù),生成非事務(wù)安全的相應(yīng)函數(shù)的普通版本,并且用運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)來填充所述存根指針(286);以及對(duì)于所述多個(gè)函數(shù)中的被標(biāo)記為事務(wù)安全的每一個(gè)相應(yīng)的函數(shù),執(zhí)行包括以下步驟的過程創(chuàng)建是事務(wù)安全的相應(yīng)函數(shù)的普通版本和事務(wù)版本的代碼(278);在所述普通版本的存根指針中,填充所述事務(wù)版本的入口點(diǎn)(282);以及在所述事務(wù)版本的存根指針中,填充運(yùn)行時(shí)出錯(cuò)處理例程的入口點(diǎn)(284)。19.如權(quán)利要求18所述的方法,其特征在于,還包括對(duì)于所述軟件應(yīng)用程序中的每一個(gè)函數(shù)中的每一個(gè)調(diào)用點(diǎn),取決于上下文來作出適當(dāng)?shù)暮瘮?shù)調(diào)用(288)。20.—種具有用于使得計(jì)算機(jī)執(zhí)行如權(quán)利要求18所述的步驟的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)(200)。全文摘要公開了用于在事務(wù)存儲(chǔ)器系統(tǒng)中創(chuàng)建和/或定位事務(wù)代碼塊的各種技術(shù)和方法。諸如軟件開發(fā)者等用戶可以用標(biāo)識(shí)符來裝飾特定函數(shù)以便指示該特定函數(shù)是事務(wù)安全的。接著創(chuàng)建軟件應(yīng)用程序中的被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本和事務(wù)版本。創(chuàng)建未被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本。對(duì)于被標(biāo)記為事務(wù)安全的每一個(gè)函數(shù)的普通版本,該普通版本中的存根指針指向事務(wù)版本。然后取決于執(zhí)行上下文來調(diào)用該函數(shù)的適當(dāng)?shù)陌姹?。文檔編號(hào)G06F12/00GK101681293SQ200880018481公開日2010年3月24日申請(qǐng)日期2008年5月30日優(yōu)先權(quán)日2007年6月1日發(fā)明者D·卡拉漢,V·K·格羅弗申請(qǐng)人:微軟公司