專利名稱:用于在被爭奪的互斥鎖上被動態(tài)限定的自旋線程的方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種改進的數(shù)據(jù)處理系統(tǒng),更具體地,涉及一種用于多進程協(xié)調(diào)的方法與裝置。再具體地講,本發(fā)明提供了一種用于在任務(wù)管理或控制過程中使用互斥鎖的進程調(diào)度或資源分配的方法與裝置。
背景技術(shù):
現(xiàn)代操作系統(tǒng)支持多道程序,由此看起來在具有單一的中央處理單元(CPU)或者可能在對稱多處理器(SMP)機器中的多個CPU的單一計算設(shè)備上有多個程序并發(fā)執(zhí)行。通過同時使用串行化執(zhí)行來達到并發(fā)執(zhí)行,也被稱為“時間分片”設(shè)備的操作系統(tǒng)允許多個程序中的一個在某限定時間段(即時間片)內(nèi)獨占地運行,然后跟隨著多個程序中另一個不同的程序獨占執(zhí)行所使用的時間段。因為在程序之間的切換發(fā)生得很快,所以看起來程序是并發(fā)運行的,雖然實際上它們是串行運行的。當(dāng)完成對于一個程序的時間片時,該程序被置入掛起或“睡眠”狀態(tài),并且另一程序“蘇醒”并開始運行。
提高單一程序或單一進程的性能的一種方法是將該程序或進程分為指令路徑,經(jīng)常被稱為“線程”,這些執(zhí)行路徑看起來是并發(fā)執(zhí)行的。這樣的程序或進程一般被稱為“多任務(wù)”或“多線程”;操作系統(tǒng)為每個線程提供時間片,在該時間片內(nèi)其具有對CPU的獨占使用。操作系統(tǒng)一般提供內(nèi)置的機制用來在并發(fā)程序和/或線程之間以非常迅速與高效的方式進行切換;對于多線程某些類型的CPU提供對操作系統(tǒng)的直接的硬件支持。因為本發(fā)明的思路同樣適用于并發(fā)線程和并發(fā)程序,其可能包括單一線程或多個線程,所以所使用的名詞“線程”可以指非多線程程序或者在多線程環(huán)境下的一個線程。
當(dāng)線程執(zhí)行時,它們必然需要訪問數(shù)據(jù)處理系統(tǒng)中的資源,諸如存儲器、數(shù)據(jù)結(jié)構(gòu)、文件、或其他資源。用來被多個線程共享的資源并且以如下方式共享要保護包含在該資源中或通過該資源傳遞的數(shù)據(jù)的完整性;作到這一點的一種方式是通過對競爭共享資源的線程的串行化執(zhí)行。當(dāng)?shù)谝痪€程已經(jīng)在使用資源時,需要該資源的第二線程必須等待,直至該資源不再被使用,這一般作為第一線程已經(jīng)成功完成其對該資源的使用的結(jié)果而發(fā)生。
操作系統(tǒng)一般提供多種機制來協(xié)調(diào)多個線程對共享資源的使用。雖然應(yīng)用程序開發(fā)者能夠創(chuàng)建其自己的特定機制,以確保對共享資源的串行化訪問,但是應(yīng)用程序開發(fā)者一般使用由操作系統(tǒng)提供或者在標準軟件庫中提供的機制,以將共享資源的控制邏輯嵌入多個線程之中。使用操作系統(tǒng)特有的機制是有利的,這是因為其允許操作系統(tǒng)將有關(guān)對于資源的競爭的信息集成到其時間分片功能之中。因此,操作系統(tǒng)根據(jù)其需求及其對資源的競爭分配時間片給線程,而不是通過使用嚴格周期性的時間片。
用來串行化對共享資源的訪問的常用機制是互斥鎖,其為具有兩個狀態(tài)的簡單鎖鎖定與未鎖定。該鎖一般以通過軟件子例程或例程標準庫中的模塊而創(chuàng)建、銷毀、或修改的數(shù)據(jù)對象或數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)?;コ怄i可以邏輯地關(guān)聯(lián)于共享資源,從而成功鎖定該互斥鎖的線程被稱為互斥鎖的當(dāng)前所有人;只有占有特定互斥鎖的線程進入訪問與該特定互斥鎖相關(guān)聯(lián)的共享資源,并且只有占有該特定互斥鎖的線程解鎖該特定互斥鎖。因此,訪問共享資源的線程內(nèi)的臨界代碼部分被經(jīng)鎖定的互斥鎖的調(diào)用以及解鎖該同一互斥鎖的調(diào)用所包圍。如果線程嘗試鎖定互斥鎖并且失敗,則在其進入訪問該共享資源的臨界代碼部分之前,必須等待直至其能夠鎖定該互斥鎖。如果互斥鎖分配在由協(xié)調(diào)的進程所共享的存儲器之內(nèi),則互斥鎖可以用來在同一進程內(nèi)或者跨越多個進程來使多個線程同步。
在不能獲取互斥鎖之后線程等待互斥鎖的方式取決于實現(xiàn)互斥鎖機制的方式。廣泛使用的鎖有三種阻塞鎖(blocking lock)、自旋鎖(spin lock)、以及阻塞鎖與自旋鎖的某種組合類型。如果已經(jīng)獲取了互斥鎖,并且另一線程請求鎖定該互斥鎖,則實現(xiàn)為阻塞鎖的互斥鎖使該等待線程不再是可運行的或者使其掛起,即進入“睡眠”。相反,自旋鎖不將等待線程置入睡眠。而是等待中的線程執(zhí)行循環(huán),由此反復(fù)請求該鎖,直至其被當(dāng)前擁有該互斥鎖的線程釋放;該循環(huán)可以包括空的迭代循環(huán),即“忙循環(huán)”或“忙等待”,其對一變量進行增量或減量,使得該線程不會馬上重新請求該互斥鎖,而是等待一段時間,該時間取決于迭代循環(huán)的長度。
與阻塞鎖或自旋鎖不同,互斥鎖經(jīng)常被實現(xiàn)為具有超時退出的自旋鎖,其為組合了阻塞鎖的特點與自旋鎖的特點的鎖。具有超時退出的自旋鎖自旋(spin)一段有限的時間,同時允許線程嘗試再次獲得該鎖;如果該有限的時間段過期了而沒有獲得該鎖,則該線程阻塞。該超時退出的時間段一般通過在忙等待循環(huán)中執(zhí)行固定數(shù)目的迭代來控制。除了鎖定例程與解鎖例程之外,軟件庫還經(jīng)常包含“試鎖”子例程,其中如果未獲取互斥鎖,則控制被返回到請求子例程,即不會強迫請求例程以等待互斥鎖變?yōu)榭捎谩?br>
阻塞與自旋的動作具有其優(yōu)缺點。阻塞迅速地掛起等待線程的執(zhí)行,當(dāng)時阻塞的動作可能會掛起不久將獲得鎖的線程,并且掛起線程意味著相對不小的費用,例如,必須保存該線程的執(zhí)行上下文。在另一方面,自旋鎖消耗資源,諸如CPU時間與存儲器高速緩存線路,當(dāng)時如果合理地選擇自旋時間段的長度,則等待線程經(jīng)常會相對較快地獲得互斥鎖,由此使得自旋操作能夠比阻塞操作消耗較少的計算資源。
在自旋與阻塞之間的選擇取決于許多因素,尤其是線程在設(shè)備上執(zhí)行的計算環(huán)境。因此,以下做法是有利的動態(tài)地調(diào)整線程在互斥鎖的自旋與阻塞之間選擇的方式。尤其有利的是為線程提供以下能力當(dāng)線程在被爭奪的互斥鎖的自旋與阻塞之間選擇時,考慮被爭奪的互斥鎖的當(dāng)前特點。
發(fā)明內(nèi)容
提供了一種在數(shù)據(jù)處理系統(tǒng)中管理互斥鎖的方法。對于每個互斥鎖,保持對于正在自旋同時等待獲取互斥鎖的線程的數(shù)目的自旋線程計數(shù)。如果線程嘗試獲取鎖定的互斥鎖,則根據(jù)限制性條件以及在嘗試獲取過程中正在自旋的線程的數(shù)目,線程進入自旋狀態(tài)或睡眠狀態(tài)。另外,在已經(jīng)在互斥鎖上睡眠之后線程在互斥鎖上自旋所需的相對時間長度,可以用來調(diào)節(jié)允許在互斥鎖上自旋的線程的數(shù)目。
被認為是本發(fā)明特性的體現(xiàn)本發(fā)明的新穎性的技術(shù)特征在權(quán)利要求中列出。然而,通過參照附圖同時閱讀以下對本發(fā)明優(yōu)選實施方式的描述,可以更好地了解本發(fā)明自身、以及優(yōu)選使用模式、進一步的目標及其優(yōu)點,其中圖1A顯示數(shù)據(jù)處理系統(tǒng)的一般網(wǎng)絡(luò),每個處理系統(tǒng)都可以實現(xiàn)本發(fā)明;圖1B顯示了可能用于數(shù)據(jù)處理系統(tǒng)內(nèi)的一般計算機體系結(jié)構(gòu),其中可以實現(xiàn)本發(fā)明;圖2A顯示在使用互斥鎖的一般多線程應(yīng)用程序內(nèi)的組件的邏輯組成的方框圖;圖2B顯示一般數(shù)據(jù)處理系統(tǒng)上的組件的邏輯組成的方框圖,該數(shù)據(jù)處理系統(tǒng)支持執(zhí)行使用由操作系統(tǒng)內(nèi)核支持的互斥鎖的多線程應(yīng)用程序;圖3顯示自旋鎖互斥鎖的一般實現(xiàn);圖4顯示根據(jù)本發(fā)明實施方式的、已經(jīng)被擴展以包括用于支持自適應(yīng)互斥鎖的信息的互斥鎖數(shù)據(jù)結(jié)構(gòu)的方框圖;圖5A顯示根據(jù)本發(fā)明實施方式的、通過一流程線程能夠鎖定處于解鎖狀態(tài)的互斥鎖同時該線程可能轉(zhuǎn)移到其他處理的過程的流程圖;圖5B顯示運行塊的流程圖,在該運行塊中可在經(jīng)鎖定的互斥鎖上自旋的線程的數(shù)目由可配置門限值限制;圖5C顯示其中線程在鎖定的互斥鎖上自旋或忙等待的運行塊的流程圖;圖5D顯示運行塊的流程圖,其中線程在經(jīng)鎖定的互斥鎖上睡眠;圖5E顯示根據(jù)本發(fā)明實施方式的運行塊的流程圖,其中當(dāng)動態(tài)調(diào)整對于可以在經(jīng)鎖定的互斥鎖上自旋的線程數(shù)目的限制值時線程可以獲取互斥鎖的;圖6顯示一過程的流程圖,其中線程通過該流程來釋放自適應(yīng)互斥鎖。
具體實施例方式
一般地,可以包括或涉及本發(fā)明的設(shè)備包括多種數(shù)據(jù)處理技術(shù)。因此,作為背景,在詳細描述本發(fā)明之前,將描述分布式數(shù)據(jù)處理系統(tǒng)之內(nèi)的硬件與軟件組件的一般組成。
現(xiàn)在參照附圖,圖1A顯示數(shù)據(jù)處理系統(tǒng)的一般網(wǎng)絡(luò),其中的每一個都可以實現(xiàn)本發(fā)明的一部分。分布式數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)101,其為可以用來提供分布式數(shù)據(jù)處理系統(tǒng)100內(nèi)連接在一起的各種設(shè)備與計算機之間的通信鏈接的介質(zhì)。網(wǎng)絡(luò)101可以包括永久連接,諸如電線或光纖電纜,或者通過電話或無線通信進行的暫時連接。在所示例子中,服務(wù)器102與服務(wù)器103與存儲單元104一起連接到網(wǎng)絡(luò)101。另外,客戶端105-107也連接到網(wǎng)絡(luò)101??蛻舳?05-107以及服務(wù)器102-103可以由各種計算設(shè)備代表,諸如大型機、個人計算機、個人數(shù)字助理(PDA)等等。分布式數(shù)據(jù)處理系統(tǒng)100可以包括未顯示的其他服務(wù)器、客戶端、路由器、其他設(shè)備、以及對等體系結(jié)構(gòu)。
在所示例子中,分布式數(shù)據(jù)處理系統(tǒng)100可以包括具有網(wǎng)絡(luò)101的因特網(wǎng),代表使用各種協(xié)議以相互通信的網(wǎng)絡(luò)與網(wǎng)關(guān)的世界范圍集合,諸如輕量目錄訪問協(xié)議(LDAP)、傳輸控制協(xié)議/互連網(wǎng)協(xié)議(TCP/IP)、超文本傳輸協(xié)議(HTTP)、無線應(yīng)用協(xié)議(WAP)等等。當(dāng)然,分布式數(shù)據(jù)處理系統(tǒng)100也可以包括多個不同類型的網(wǎng)絡(luò),諸如(例如)內(nèi)部網(wǎng)、局域網(wǎng)(LAN)、或廣域網(wǎng)(WAN)。例如,服務(wù)器102直接支持客戶端109與網(wǎng)絡(luò)110,其包含了無線通信鏈接。有網(wǎng)絡(luò)功能的電話111通過無線鏈接連112接到網(wǎng)絡(luò)110,并且PDA113通過無線鏈接114連接到網(wǎng)絡(luò)110。電話111與PDA113也可以使用適當(dāng)?shù)募夹g(shù)(諸如“藍牙”無線技術(shù))直接在其之間通過無線鏈接115傳送數(shù)據(jù),以生成所謂的個人區(qū)域網(wǎng)絡(luò)(PAN),或者個人臨時網(wǎng)絡(luò)。以類似的方式,PDA113可以通過無線通信鏈接116傳送數(shù)據(jù)給PDA107。
本發(fā)明可以在多種硬件平臺上實現(xiàn);圖1A意為異構(gòu)計算環(huán)境的例子,并不是對于本發(fā)明的體系結(jié)構(gòu)上的限制。
現(xiàn)在參照圖1B,其中的圖顯示了數(shù)據(jù)處理系統(tǒng)(諸如圖1A所示)的一般計算機體系結(jié)構(gòu),其中可以實現(xiàn)本發(fā)明。數(shù)據(jù)處理系統(tǒng)120包含連接到內(nèi)部系統(tǒng)總線123的一個或更多個中央處理單元(CPU)122,該內(nèi)部系統(tǒng)總線123互連了隨機存取存儲器(RAM)124、只讀存儲器126、以及輸入/輸出適配器128,輸入/輸出適配器128支持各種I/O設(shè)備,諸如打印機130、磁盤單元132、或其他未顯示的設(shè)備,諸如音頻輸出系統(tǒng)等等。系統(tǒng)總線123還連接了通信適配器134,其提供到通信鏈接136的訪問。用戶接口適配器148連接各種用戶設(shè)備,諸如鍵盤140和鼠標142,或其它未示裝置如觸摸屏、輸入筆、麥克風(fēng)等等。顯示適配器144將系統(tǒng)總線123連接到顯示設(shè)備146。
本領(lǐng)域技術(shù)人員應(yīng)該理解圖1B中的硬件可以根據(jù)系統(tǒng)的實現(xiàn)而變化。例如,該系統(tǒng)可以具有一個或更多個處理器,諸如基于IntelPenteium的處理器與數(shù)字信號處理器(DSP),以及一種或更多種類型的易失與非易失存儲器。除圖1B所示的硬件之外,或者替換它們,可以使用其他外圍設(shè)備。所示的例子并不意味著對本發(fā)明的體系結(jié)構(gòu)的限制。
除了能夠在各種硬件平臺上實現(xiàn)之外,本發(fā)明還可以實現(xiàn)于各種軟件環(huán)境。一般的操作系統(tǒng)可以用來控制在每個數(shù)據(jù)處理系統(tǒng)中的程序執(zhí)行。例如,一個設(shè)備可以運行Unix操作系統(tǒng),同時另一設(shè)備包含簡單的Java運行時環(huán)境。代表性的計算機平臺可以包括瀏覽器,其為公知的軟件應(yīng)用程序,用來訪問各種格式的超文本文檔,諸如圖形文件、字處理文件、可擴展標記語言(XML)、超文本標記語言(HTML)、手持設(shè)備標記語言(HDML)、無線標記語言(WML)、以及各種其他文件格式與類型。
本發(fā)明可以實現(xiàn)在各種硬件與軟件平臺之上,如上參照圖1A與圖1B所述,包括對稱多處理器(SMP)機器。雖然本發(fā)明不需要圖1A與1B中所示的所有組件,但是這些部件可以由其中嵌入了本發(fā)明的組件使用,例如操作系統(tǒng)、應(yīng)用程序、或者其他組件。另外,本發(fā)明可以實現(xiàn)于其中采用諸如顯示設(shè)備等各種組件以間接地支持本發(fā)明的計算機環(huán)境中,例如允許系統(tǒng)管理員配置參數(shù)與部件。
然而,更具體地,本發(fā)明針對改進的互斥鎖,其可以實現(xiàn)于操作系統(tǒng)內(nèi)、在應(yīng)用程序內(nèi)、或者以其他方式實現(xiàn)于數(shù)據(jù)處理系統(tǒng)內(nèi)。在更詳細地描述該改進互斥鎖之前,先描述一般互斥鎖的使用。如上所述,應(yīng)用程序開發(fā)者可以創(chuàng)建應(yīng)用程序特有的互斥鎖,如圖2A所示,但是應(yīng)用程序開發(fā)者一般采用由操作系統(tǒng)提供或者在標準軟件庫內(nèi)提供的機制,如圖2B所示。本發(fā)明可以各種應(yīng)用程序特有的或者非應(yīng)用程序特有的形式實現(xiàn),而影響本發(fā)明的范圍。
現(xiàn)在參照圖2A,其中的方框圖顯示了在使用互斥鎖的一般多線程應(yīng)用程序內(nèi)的組件的邏輯組成。多線程應(yīng)用程序202包括多個線程,諸如線程204與線程206。與依賴可能由操作系統(tǒng)提供的或者在標準軟件庫(諸如POSIX的pthread庫)內(nèi)提供的互斥鎖函數(shù)不同,應(yīng)用程序可以實現(xiàn)其自己的互斥鎖函數(shù)208,其由互斥鎖數(shù)據(jù)結(jié)構(gòu)210支持,以針對由組成該應(yīng)用程序的線程所共享的資源使其自身線程的運行串行化。
現(xiàn)在參照圖2B,其中的方框圖顯示在一般數(shù)據(jù)處理系統(tǒng)上的組件的邏輯組成,該數(shù)據(jù)處理系統(tǒng)支持執(zhí)行使用由操作系統(tǒng)內(nèi)核支持的互斥鎖的多線程應(yīng)用程序。計算機220支持包含內(nèi)核級函數(shù)222的操作系統(tǒng),該內(nèi)核級函數(shù)222控制多線程應(yīng)用程序224與226的運行,多線程應(yīng)用程序224與226分別包括線程228與230。內(nèi)核內(nèi)的線程調(diào)度器232使用線程調(diào)度器數(shù)據(jù)結(jié)構(gòu)234確定何時線程運行以及何時掛起線程,線程調(diào)度器數(shù)據(jù)結(jié)構(gòu)234可以包含用來協(xié)助管理線程調(diào)度任務(wù)的數(shù)據(jù)結(jié)構(gòu);例如,該數(shù)據(jù)結(jié)構(gòu)可以包括FIFO(先入先出)隊列,諸如與各種線程狀態(tài)相關(guān)聯(lián)的隊列,例如,準備執(zhí)行隊列、睡眠隊列、I/O阻塞隊列、互斥鎖等待隊列、或者其他狀態(tài)。駐留于內(nèi)核內(nèi)的互斥鎖管理例程236(或者作為以內(nèi)核級特權(quán)運行的內(nèi)核擴展的例程)提供了以下函數(shù),用來創(chuàng)建、修改、并銷毀互斥鎖,其在互斥鎖數(shù)據(jù)結(jié)構(gòu)238中得到反映。此后,認為名詞“睡眠”等同于任意形式的“掛起”。
現(xiàn)在參照圖3,其中顯示了自旋鎖互斥鎖的一般實現(xiàn)。當(dāng)線程請求獲取互斥鎖時,開始該過程(步驟302);此后,認為名詞“獲取”、“保留”、“具有”、“擁有”、或者“鎖定”互斥鎖是等同的。確定互斥鎖是否自由并解鎖(步驟304),并且如果否,則檢查該線程是否已經(jīng)通過在該互斥鎖上自旋而使用了可配置數(shù)量的時間(步驟306)。如果否,則該線程進行忙等待循環(huán)(步驟308),即其自旋于循環(huán),同時其等待互斥鎖變?yōu)榭捎?;如果該線程先前已經(jīng)通過了步驟302-308,則在該線程通過完成另一忙等待循環(huán)來繼續(xù)進行自旋操作。在自旋一段時間之后,該線程重復(fù)步驟302。
如果在步驟304該互斥鎖自由,則為該線程鎖定該互斥鎖(步驟310),并且線程進入訪問共享資源(步驟312),而不可能與另一線程沖突并破壞與共享資源相關(guān)聯(lián)的數(shù)據(jù)的完整性。在線程進行了其對共享資源的操作之后,則該線程就請求釋放互斥鎖,并且該互斥鎖被解鎖(步驟314),由此結(jié)束該過程。在互斥鎖被解鎖之后,其他并發(fā)執(zhí)行的線程可以使用該互斥鎖。如果如在步驟306所確定的、線程已經(jīng)通過在互斥鎖上自旋而使用了可配置數(shù)量的時間,則在該線程在該互斥鎖上睡眠(步驟316),例如,通過調(diào)用將該進程置入睡眠狀態(tài)的內(nèi)核函數(shù)。該線程可以睡眠可配置的時間段,或者內(nèi)核可以具有在互斥鎖解鎖時喚醒該線程的能力。在任何一種情況下,在線程被喚醒后,該線程再次嘗試獲取互斥鎖。
現(xiàn)在轉(zhuǎn)到本發(fā)明,本發(fā)明針對用于獲取被爭奪的互斥鎖的過程,其以逐個互斥鎖的方式動態(tài)適應(yīng)于當(dāng)前資源,該當(dāng)前資源正在被嘗試獲取被爭奪的互斥鎖的多個線程消耗。此后余下的附圖顯示了本發(fā)明的各種實施方式。
現(xiàn)在參照圖4,其中的方框圖顯示了根據(jù)本發(fā)明實施方式的、已經(jīng)被擴展以包括用于支持自適應(yīng)互斥鎖的信息的互斥鎖數(shù)據(jù)結(jié)構(gòu)。應(yīng)該注意,在所示互斥鎖數(shù)據(jù)結(jié)構(gòu)中的信息數(shù)據(jù)項可以以其他數(shù)據(jù)結(jié)構(gòu)存儲,而圖4中的互斥鎖數(shù)據(jù)結(jié)構(gòu)只是在邏輯上相關(guān)聯(lián)以支持本發(fā)明實施方式的各種信息數(shù)據(jù)項的邏輯組成的例子;在互斥鎖數(shù)據(jù)結(jié)構(gòu)中可以包括其他信息數(shù)據(jù)項。
互斥鎖數(shù)據(jù)結(jié)構(gòu)402包含互斥鎖404,其為可被反轉(zhuǎn)的數(shù)據(jù)值反映該互斥鎖的鎖定與解鎖狀態(tài)。如果互斥鎖是鎖定的,則鎖定線程標識符406表示由操作系統(tǒng)向當(dāng)前持有該互斥鎖的線程分配的線程標識符,即鎖定該互斥鎖的線程。如果互斥鎖是鎖定的并且有等待其釋放的線程,即在該互斥鎖上自旋或睡眠的線程,則等待線程列表408包含正在等待該互斥鎖釋放的線程的線程標識符??商鎿Q地,等待線程列表408可以包括記錄列表,其中每個記錄都代表正在該互斥鎖上等待的線程,并且每個記錄可以包括線程管理信息。
互斥鎖數(shù)據(jù)結(jié)構(gòu)402還包括數(shù)據(jù)值410,其代表正在該互斥鎖上自旋的線程的數(shù)目。如果線程在等待互斥鎖釋放時進入了自旋狀態(tài),則增加自旋線程的數(shù)目。如果線程獲得互斥鎖,則線程退出自旋狀態(tài),并且減小自旋線程的數(shù)目。數(shù)據(jù)值412表示對于在任意時間可以在等待互斥鎖時自旋的線程的數(shù)目的門限值。假如達到該限制,則線程不再進入自旋狀態(tài)同時等待互斥鎖,以下將詳細描述。在可替換實施方式中,互斥鎖數(shù)據(jù)結(jié)構(gòu)402也可以包括數(shù)據(jù)值414,其表示后-睡眠互斥鎖獲取嘗試計數(shù)門限值;以下參照圖5E將詳細描述該門限值的使用。
現(xiàn)在參照圖5A,其中的流程圖顯示了根據(jù)本發(fā)明實施方式的過程,通過該過程線程能夠鎖定處于解鎖狀態(tài)的互斥鎖并且同時可能轉(zhuǎn)移到其他處理。圖5A-5E顯示可能在線程嘗試獲取互斥鎖時發(fā)生的處理的不同部分。圖5A中的流程圖表示一種初始處理,其可能在線程嘗試獲取互斥鎖時調(diào)用例程時發(fā)生。從圖5A的流程圖中,該處理可能轉(zhuǎn)移到在圖5B-5E中所示的其他流程圖中,但是描繪其他每個流程圖使得該處理在圖5A中結(jié)束。
參照圖5A,當(dāng)進入鎖定自適應(yīng)互斥鎖的例程時,開始該過程(步驟502),例如,當(dāng)從特定線程調(diào)用該例程時。在這個例子中,該例程可以被稱為“互斥鎖管理例程”,其可能作為內(nèi)核級例程存在,通過特殊的操作系統(tǒng)調(diào)用訪問該內(nèi)核級例程,也可能作為只能用特殊特權(quán)運行的某種其他類型的例程存在??商鎿Q地,應(yīng)用程序可能實現(xiàn)本發(fā)明的實施方式,在這種情況下,可以將互斥鎖管理例程編譯到該應(yīng)用程序的目標代碼中。
為了反映線程的最近的狀態(tài),例如,出于線程調(diào)度器的緣故,設(shè)置標志值以指示該線程在互斥鎖上等待(步驟504)。也可能初始化各種其他的線程特有的數(shù)據(jù)值。
然后確定互斥鎖是否已經(jīng)被鎖定(步驟506)。如果互斥鎖未被鎖定,則為該線程鎖定該互斥鎖(步驟508)。應(yīng)該注意,步驟508與步驟510應(yīng)該實現(xiàn)為原子操作,即作為不能被中斷的操作;存在各種公知技術(shù)來進行針對互斥鎖的原子操作。
為了反映線程的當(dāng)前狀態(tài),線程標識符存儲在所需要的任意數(shù)據(jù)結(jié)構(gòu)之中,以指示已經(jīng)獲取該互斥鎖的線程的身份(步驟510),然后清除等待標志值以指示該線程不再在該互斥鎖上等待(步驟512)。然后,互斥鎖管理例程返回執(zhí)行調(diào)用的例程(步驟514),并且結(jié)束獲取互斥鎖的過程。
現(xiàn)在參照圖5B,其中的流程圖顯示了其中可以在經(jīng)鎖定的互斥鎖上自旋的線程的數(shù)目由可配置門限值限制的運行塊。在圖5B的流程圖中所示的運行塊表示可能在圖5A的步驟506確定經(jīng)鎖定的互斥鎖之后發(fā)生的某些處理。
現(xiàn)在參照圖5B,在該運行塊開始時,確定已經(jīng)在互斥鎖上自旋的線程的數(shù)目是否已經(jīng)達到了最大值(步驟522)?;コ怄i管理數(shù)據(jù)結(jié)構(gòu)可能包含在等待該特定互斥鎖時已經(jīng)進入自旋狀態(tài)的線程當(dāng)前總數(shù),并且互斥鎖管理數(shù)據(jù)結(jié)構(gòu)也可以包含互斥鎖特有的自旋線程計數(shù)門限值,例如,如圖4所示。如果已經(jīng)達到了對于自旋線程的數(shù)目的限制,則該過程轉(zhuǎn)移到圖5D所示的運行塊,使得該線程進入睡眠狀態(tài),而不是進入自旋狀態(tài)。
如果在步驟522確定還沒有達到對于自旋線程的數(shù)目的限制,則該線程可以進入自旋狀態(tài),同時其等待鎖定的互斥鎖變?yōu)榭捎?。然后增加在互斥鎖管理數(shù)據(jù)結(jié)構(gòu)中表示自旋線程的數(shù)目的數(shù)據(jù)值,以反映另一線程已經(jīng)進入了對于該互斥鎖的自旋狀態(tài)(步驟524)。應(yīng)該注意,步驟522與步驟524應(yīng)該實現(xiàn)為原子操作;對于自旋線程計數(shù)的檢查與更新應(yīng)該作為單一操作進行,其不能被中斷,以防在給定時間兩個或更多個線程進行該檢查。
然后,確定該互斥鎖是否保持鎖定(步驟526)。如果是,則該線程在該互斥鎖上自旋。該線程可以通過在步驟526進入緊密循環(huán)(tight loop)而在互斥鎖上自旋;該線程可以反復(fù)檢查互斥鎖是否已被解鎖,并且如果否,則該線程立即轉(zhuǎn)移返回步驟526??商鎿Q地,如圖5B所示,可以執(zhí)行更密集的自旋;該線程可以轉(zhuǎn)移到在圖5C中所示的運行塊,其中該線程執(zhí)行可配置的忙等待循環(huán)。
如果在步驟526確定互斥鎖被解鎖,這可能在線程已經(jīng)在互斥鎖自旋了一定時間段之后發(fā)生,則為該線程鎖定互斥鎖(步驟528)。再次地,應(yīng)該注意步驟526與步驟528應(yīng)該實現(xiàn)為原子操作。在獲取互斥鎖之后,該線程就不再處于自旋狀態(tài)。因此,減少在互斥鎖管理數(shù)據(jù)結(jié)構(gòu)中表示自旋線程的數(shù)目的數(shù)據(jù)值(步驟530)。結(jié)束該運行塊,此后返回圖5A中的步驟510。
現(xiàn)在參照圖5C,其中的流程圖顯示了其中線程在鎖定的互斥鎖上自旋或忙等待的運行塊。在圖5C中的流程圖中所顯示的運行塊表示可能在圖5B的步驟526確定互斥鎖被鎖定之后發(fā)生的某些處理。
現(xiàn)在參照圖5C,該運行塊開始時設(shè)置標志值,以指示該線程在互斥鎖上自旋或者忙等待(步驟532),由此反映該線程的最近狀態(tài)。然后,如果必要,則初始化忙等待循環(huán)(步驟534),并且進入、執(zhí)行、并完成該忙等待循環(huán)(步驟536)。例如,該忙等待循環(huán)可以包含空迭代循環(huán),其不進行除檢查該鎖的狀態(tài)以及可選地嘗試獲取該鎖之外任何實際上有用的工作。因為該線程已經(jīng)完成了忙等待循環(huán),所以清除表示該線程在互斥鎖上自旋或者忙等待的標志值(步驟538),由此反映該線程的最近狀態(tài)。結(jié)束該運行塊,此后返回圖5B中的步驟526。在可替換實施方式中,圖5C中所示的忙等待循環(huán)可以包括可配置的忙等待超時退出,其限制線程所進行的忙等待的數(shù)量,并且如果該線程達到了這一限制,在該線程進入睡眠狀態(tài)。
現(xiàn)在參照圖5D,其中的流程圖顯示了其中線程在經(jīng)鎖定的互斥鎖上睡眠的運行塊。在圖5D中的流程圖內(nèi)所顯示的運行塊表示可能在互斥鎖在圖5B的步驟522已經(jīng)確定已經(jīng)達到自旋線程的最大數(shù)目之后所發(fā)生的某些處理。
現(xiàn)在參照圖5D,該運行塊開始時設(shè)置標志值,以指示該線程正在互斥鎖上睡眠(步驟542),因此反映該線程的最近狀態(tài)。然后,該線程進入睡眠狀態(tài)一段時間(步驟544)。該線程可能睡眠一預(yù)先設(shè)置的時間段,但優(yōu)選地,該線程睡眠直至被來自另一線程的目標喚醒信號或者以其他方式(例如通過線程調(diào)度器的動作)所喚醒。
在某個時間點上,線程退出睡眠狀態(tài)(步驟546)。因為該線程已經(jīng)完成了睡眠循環(huán),所以清除表示該線程正在互斥鎖上睡眠的標志值(步驟548),由此反映該線程的最近狀態(tài)。
作為可選的步驟,可以設(shè)置后-睡眠(Post-sleep)標志以指示該線程已經(jīng)在互斥鎖上睡眠,同時等待獲取該互斥鎖(步驟550);當(dāng)線程開始進入互斥鎖管理例程嘗試獲取互斥鎖時(例如在圖5A的步驟502),該后-睡眠標志可以已經(jīng)被初始化。下面針對圖5E中所示的本發(fā)明的可替換實施方式將更詳細地描述該后-睡眠標志的意義。結(jié)束該運行塊,此后返回圖5B中的步驟522。
再次參照圖5B,使用本發(fā)明,線程根據(jù)互斥鎖的當(dāng)前計算環(huán)境進行各種動作。更具體地,顯然當(dāng)線程嘗試獲取互斥鎖時,其行為取決于已經(jīng)正在互斥鎖上自旋的線程的當(dāng)前數(shù)目以及對于在任意給定時間允許在互斥鎖上自旋的線程的最大數(shù)目的限制值或門限值。通過這種方法,本發(fā)明保證了足夠數(shù)目的線程在互斥鎖上自旋,以減少獲取互斥鎖時的延遲,即如果多于一個的線程正在互斥鎖上等待,則盡可能快地獲取互斥鎖。另外,減少了外來的自旋,這是因為只允許有限數(shù)目的線程在互斥鎖上自旋,而其他線程被置入睡眠。
對于大多數(shù)工作負荷來說,自旋線程計數(shù)門限可以設(shè)置為值一,從而在任意給定時間只有單獨一個線程在互斥鎖上自旋。然而,可能存在這種情況需要將該門限設(shè)置為更大的值,以避免成為瓶頸的串行化喚醒。例如,如果對互斥鎖爭奪得很激烈,并且該互斥鎖被保持了短于線程睡眠與蘇醒所需的時間段的一段時間,則線程將進入睡眠,否則此時如果其自旋的話其會迅速獲取該互斥鎖。在這種場景下,最好有多于一個的自旋線程。
在可替換實施方式中,對于自旋線程數(shù)目的門限限制是動態(tài)可調(diào)整的。當(dāng)在線程已經(jīng)在互斥鎖上睡眠之后該線程開始在互斥鎖上自旋時,在其獲取該互斥鎖之前,該線程監(jiān)視其自旋的時間長度。如果在蘇醒后該線程相對較快地獲取了互斥鎖,則可以增加自旋線程計數(shù)門限,由此確保足夠數(shù)目的線程在互斥鎖上自旋,從而盡可能快地在互斥鎖釋放之后獲取它。相反,如果在蘇醒之后線程自旋過長,則可以減少自旋線程計數(shù)門限,然而自旋線程計數(shù)門限將具有下限制值一。通過這種方式,該互斥鎖在運行時自適應(yīng)于其環(huán)境的計算行為。
現(xiàn)在參照圖5E,其中的流程圖顯示了根據(jù)本發(fā)明實施方式的運行塊,其中當(dāng)動態(tài)調(diào)整對于可以在經(jīng)鎖定的互斥鎖上自旋的線程數(shù)目的限制值時線程可以獲取互斥鎖。在圖5E中的流程圖中所顯示的該運行塊表示在圖5A的步驟506互斥鎖被確定為鎖定之后可能發(fā)生的某些處理。圖5E與圖5B有些類似;圖5E中的某些步驟與圖5B中的某些步驟相同,并且圖5E中的處理可以轉(zhuǎn)移到圖5C與圖5D中的運行塊。然而,圖5E表示圖5B中所示運行塊的可替換實施方式;當(dāng)在圖5A的步驟506處過程轉(zhuǎn)移時,可以執(zhí)行圖5B或圖5E中的運行塊,但不能兩者都執(zhí)行。
現(xiàn)在參照圖5E,當(dāng)該運行塊開始時,確定已經(jīng)正在互斥鎖上自旋的線程的數(shù)目是否達到了最大值(步驟552)。如果已經(jīng)達到了對于自旋線程的數(shù)目的限制,則該處理轉(zhuǎn)移到圖5D中所示的運行塊,從而該線程進入睡眠狀態(tài),而不是進入自旋狀態(tài)。
如果在步驟552處,確定沒有達到對自旋線程的數(shù)目的限制,則該線程可以進入自旋狀態(tài),同時其等待經(jīng)鎖定的互斥鎖變?yōu)榭捎?。然后,增加在互斥鎖管理數(shù)據(jù)結(jié)構(gòu)中表示自旋線程數(shù)目的數(shù)據(jù)值,以反映另一線程已經(jīng)進入了該互斥鎖上的自旋狀態(tài)(步驟554)。再次地,應(yīng)該注意步驟552與步驟554應(yīng)該實現(xiàn)為原子操作。
在確定互斥鎖是否保持鎖定之前,即在嘗試實際獲取互斥鎖的操作之前,增加表示線程特有的、互斥鎖獲取嘗試計數(shù)的數(shù)據(jù)值(步驟556)。該互斥鎖獲取嘗試計數(shù)為線程特有的數(shù)據(jù)值;其可以逐線程的方式作為線程執(zhí)行上下文中的局部變量來被維持。換而言之,該互斥鎖獲取嘗試計數(shù)可以不是在互斥鎖特有的互斥鎖管理數(shù)據(jù)結(jié)構(gòu)中所保持的線程全局數(shù)據(jù)值。當(dāng)線程開始進入互斥鎖管理例程以嘗試獲取互斥鎖(例如圖5A中的步驟502)時,可以初始化該互斥鎖嘗試計數(shù);可初始化表示計數(shù)的該數(shù)據(jù)值為值一,以便該值準確地反映在圖5A步驟506處對于獲取互斥鎖的初始嘗試。以下將更詳細地描述該互斥鎖獲取嘗試計數(shù)的使用。
然后確定互斥鎖是否保持鎖定(步驟558)。如果是,則線程在互斥鎖上自旋。線程可以通過在步驟556與558進入緊密循環(huán)而在自旋鎖上自旋;該線程可以反復(fù)檢查互斥鎖是否已經(jīng)解鎖,并且如果否,則線程立即轉(zhuǎn)移返回步驟556??商鎿Q地,如圖5E所示,可以進行更密集的自旋;線程可以轉(zhuǎn)移到圖5C所示的運行塊,其中線程執(zhí)行可配置的忙等待循環(huán)。
如果在步驟558確定互斥鎖為解鎖,這可能在線程在互斥鎖上自旋了一段時間段之后發(fā)生,則為線程鎖定互斥鎖(步驟560)。再次地,應(yīng)該注意步驟558與步驟560應(yīng)該實現(xiàn)為原子操作。在獲取互斥鎖之后,線程就不再處于自旋狀態(tài)。因此,減少在互斥鎖管理數(shù)據(jù)結(jié)構(gòu)中表示自旋線程數(shù)目的數(shù)據(jù)值(步驟562)。
此時,圖5E與圖5B顯著地不同,圖5E顯示以下的實施方式對于自旋線程的數(shù)目的限制被實現(xiàn)為動態(tài)可調(diào)整的值。確定該線程是否已進入睡眠狀態(tài)同時等待互斥鎖(步驟564)。例如,在圖5D的步驟550,已經(jīng)設(shè)置后-睡眠標志以表示該線程已經(jīng)在互斥鎖上睡眠同時等待獲取互斥鎖。如果線程沒有進入睡眠狀態(tài),則結(jié)束該運行塊,此后返回圖5A中的步驟510。如果線程確實進入了睡眠狀態(tài),則通過以下步驟調(diào)整對于自旋線程的數(shù)目的限制。
確定該線程是否已經(jīng)以多于限定值嘗試獲取互斥鎖(步驟566)。每次嘗試時,在步驟556處積累獲取互斥鎖的嘗試的數(shù)目的計數(shù);這是線程特有的或與線程相關(guān)的值。后-睡眠互斥鎖獲取嘗試計數(shù)門限值為互斥鎖特有的值;例如,其可以在互斥鎖特有的數(shù)據(jù)結(jié)構(gòu)中保持,如圖4所示。
如果后-睡眠線程的互斥鎖獲取嘗試數(shù)目大于后-睡眠互斥鎖獲取嘗試計數(shù)門限,則該線程在獲取互斥鎖之前已經(jīng)自旋了相對較長的時間,因此減少自旋線程計數(shù)門限(步驟568)。如果后-睡眠線程的互斥鎖獲取嘗試數(shù)目小于后-睡眠互斥鎖獲取嘗試計數(shù)門限,則該線程在獲取互斥鎖之前已經(jīng)自旋了相對較短的時間,因此增加自旋線程計數(shù)門限(步驟570)。雖然圖中未顯示,但是對于自旋線程的最大可能數(shù)目可以有上限,其中該上限將取決于可用于支持線程的資源。另外,可以以除一以外的量增加或減少自旋線程計數(shù)門限,即不以值一來增加或減小。另外,可以根據(jù)可用來支持自旋線程的其他資源的值來動態(tài)計算用來增加或減少自旋線程計數(shù)門限的值。
后-睡眠互斥鎖獲取嘗試計數(shù)門限可以是可配置的值,其為互斥鎖所特有、應(yīng)用程序所特有、或者可能為系統(tǒng)所特有,從而其用于在給定系統(tǒng)內(nèi)所支持的每個互斥鎖。另外,后-睡眠互斥鎖獲取嘗試計數(shù)門限可以是根據(jù)資源可用性而動態(tài)可調(diào)整的。
在可替換實施方式中,可以用表示下門限值與上門限值的兩個門限值來替換后-睡眠互斥鎖獲取嘗試計數(shù)門限。對互斥鎖獲取嘗試的數(shù)目與后-睡眠互斥鎖獲取嘗試計數(shù)下門限值的比較結(jié)果將控制何時增加自旋線程計數(shù)門限。對互斥鎖獲取嘗試的數(shù)目與后-睡眠互斥鎖獲取嘗試計數(shù)上門限值的比較結(jié)果將控制何時減少自旋線程計數(shù)門限。如果互斥鎖獲取嘗試的數(shù)目落入這兩個門限值之間,則不調(diào)整自旋線程計數(shù)門限??梢栽诒景l(fā)明的各種實施方式中實現(xiàn)用于調(diào)整自旋線程計數(shù)門限的其他算法。
在圖5E中所示的可替換實施方式中,對于自旋線程的數(shù)目的門限限制是動態(tài)可調(diào)整的。在步驟566,對后-睡眠線程的互斥鎖獲取嘗試的數(shù)目與后-睡眠互斥鎖獲取嘗試計數(shù)門限的比較結(jié)果,將確定是否有足夠數(shù)目的線程在互斥鎖上自旋。如上所述,該某些情景下,在任意給定時間由具有多于一個自旋線程可能更好。
當(dāng)線程在已經(jīng)在互斥鎖上睡眠之后開始在互斥鎖上自旋時,該線程監(jiān)視其在獲取互斥鎖之前自旋的時間長度;這在步驟556通過保持對于互斥鎖獲取嘗試數(shù)目的計數(shù)來進行,但是在本發(fā)明的其他實施方式下可能保持其他計算費用測度。
相對較小的互斥鎖獲取嘗試的計數(shù)值確定線程在蘇醒之后相對較快地獲取互斥鎖;在步驟566處負的結(jié)果可說明上述情況。對于這種情況,可以增加自旋線程計數(shù)門限,以確保足夠數(shù)目的線程在互斥鎖上自旋;這由步驟570表示。
相反,相對較大的互斥鎖獲取嘗試的計數(shù)值確定線程在蘇醒之后過度自旋;在步驟566處正的結(jié)果可說明上述情況。對于這種情況,可以減少自旋線程計數(shù)門限,以確保不會有太多的線程在互斥鎖上自旋;這由步驟568給出,然而自旋線程計數(shù)門限將具有下限值一。通過這種方式,該互斥鎖在運行時自適應(yīng)于其環(huán)境的計算行為。
現(xiàn)在參照圖6,其中的流程圖顯示了線程釋放自適應(yīng)互斥鎖的過程。通過顯示一線程,該線程釋放先前通過使用圖5A-5E的過程而獲得的互斥鎖,圖6補充了圖5A-5E。當(dāng)進入解鎖互斥鎖的例程時,開始該過程(步驟602)。在檢查以確保請求解鎖互斥鎖的線程為先前鎖定該互斥鎖的線程之后,解鎖該互斥鎖(步驟604);應(yīng)該注意步驟604應(yīng)當(dāng)實現(xiàn)為原子操作。然后,該例程清除或刪除先前存儲在數(shù)據(jù)結(jié)構(gòu)中的所有線程標識符,該線程標識符指示先前鎖定該互斥鎖的線程的身份(步驟606)。
然后確定是否有任何已經(jīng)在等待該互斥鎖的線程正在該互斥鎖上睡眠(步驟608)。如果是,則向正在該互斥鎖上睡眠的線程發(fā)送喚醒信號(步驟610),例如,對線程的執(zhí)行進行安排的系統(tǒng)調(diào)用。如果多個線程正在該互斥鎖上睡眠,則可以使用適當(dāng)?shù)乃惴▉磉x擇應(yīng)該嘗試鎖定該互斥鎖的下一個線程。然后,解鎖例程返回調(diào)用例程(步驟612),由此結(jié)束解鎖互斥鎖的過程。
從以上的詳細描述,可以明顯地看出本發(fā)明的的優(yōu)點。在現(xiàn)有技術(shù)中,當(dāng)互斥鎖被鎖定時,線程一般在鎖定的互斥鎖上進行自旋超時退出操作,這將使該線程在可以在系統(tǒng)級或應(yīng)用程序級上配置的一段時間之后睡眠。使用本發(fā)明,對于線程應(yīng)當(dāng)在經(jīng)鎖定的互斥鎖上自旋還是睡眠的確定取決于圍繞該特定互斥鎖的計算環(huán)境。本發(fā)明調(diào)整線程針對特定的經(jīng)鎖定的互斥鎖的行為,使得線程進入以如下方式自旋狀態(tài)或進入睡眠狀態(tài)該方式取決于其他線程針對該互斥鎖的先前的動作。
應(yīng)該注意,雖然在功能完備的數(shù)據(jù)處理系統(tǒng)的環(huán)境下描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員應(yīng)該理解本發(fā)明的過程能夠以計算機可讀介質(zhì)指令的形式以及各種其他形式分布,而不管實際用來執(zhí)行該分布的信號承載介質(zhì)的特定類型。計算機可讀介質(zhì)的例子包括諸如EPROM、ROM、磁帶、紙張、軟盤、硬盤驅(qū)動器、RAM、以及CD-ROM等介質(zhì),以及諸如數(shù)字與模擬通信鏈接等傳送類型的介質(zhì)。
對本發(fā)明的描述的目的在于說明,而不是窮盡的或限于所公開的實施方式。對于本領(lǐng)域技術(shù)人員來說,顯然有許多改動與變化。所選擇的實施方式是用來解釋本發(fā)明的原理及其實際應(yīng)用,并且使本領(lǐng)域技術(shù)人員能夠理解本發(fā)明,從而實現(xiàn)適合于其他所設(shè)想的用途的具有各種修改的實施方式。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中管理互斥鎖的方法,該方法包括以下步驟保持對于正在互斥鎖上自旋的線程的數(shù)目的自旋線程計數(shù)值;第一線程嘗試獲取該互斥鎖;以及作為對確定該互斥鎖已經(jīng)被第二線程獲取的響應(yīng),根據(jù)所述自旋線程計數(shù)值,確定第一線程進入自旋狀態(tài)還是睡眠狀態(tài)。
2.根據(jù)權(quán)利要求1的方法,還包括以下步驟如果所述自旋線程計數(shù)值滿足第一條件,則進入自旋狀態(tài);以及如果所述自旋線程計數(shù)值滿足第二條件,則進入睡眠狀態(tài)。
3.根據(jù)權(quán)利要求2的方法,其中所述第一條件為所述自旋線程計數(shù)值小于自旋線程計數(shù)門限值。
4.根據(jù)權(quán)利要求2的方法,其中所述第二條件為所述自旋線程計數(shù)值大于或等于自旋線程計數(shù)門限值。
5.根據(jù)權(quán)利要求2的方法,還包括以下步驟比較所述自旋線程計數(shù)值與自旋線程計數(shù)門限值,以選擇自旋狀態(tài)或睡眠狀態(tài)。
6.根據(jù)權(quán)利要求5的方法,還包括以下步驟根據(jù)線程在所述互斥鎖上睡眠之后獲取所述互斥鎖所需的時間量,調(diào)整所述自旋線程計數(shù)門限值。
7.根據(jù)權(quán)利要求5的方法,還包括以下步驟根據(jù)線程在所述互斥鎖上睡眠之后獲取所述互斥鎖所需的獲取嘗試次數(shù),調(diào)整所述自旋線程計數(shù)門限值。
8.根據(jù)權(quán)利要求5的方法,還包括以下步驟如果在所述互斥鎖上睡眠之后線程獲取所述互斥鎖相對較慢,則減小所述自旋線程計數(shù)門限值。
9.根據(jù)權(quán)利要求5的方法,還包括以下步驟如果在所述互斥鎖上睡眠之后線程獲取所述互斥鎖相對較快,則增加所述自旋線程計數(shù)門限值。
10.一種在計算機可讀介質(zhì)上用于在數(shù)據(jù)處理系統(tǒng)中管理互斥鎖的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包括用于保持對于正在互斥鎖上自旋的線程的數(shù)目的自旋線程計數(shù)值的部分;用于第一線程嘗試獲取該互斥鎖的部分;以及用于作為對確定該互斥鎖已經(jīng)被第二線程獲取的響應(yīng),根據(jù)所述自旋線程計數(shù)值,確定第一線程進入自旋狀態(tài)還是睡眠狀態(tài)的部分。
11.根據(jù)權(quán)利要求10的計算機程序產(chǎn)品,還包括用于如果所述自旋線程計數(shù)值滿足第一條件,則進入自旋狀態(tài)的部分;以及用于如果所述自旋線程計數(shù)值滿足第二條件,則進入睡眠狀態(tài)的部分。
12.根據(jù)權(quán)利要求11的計算機程序產(chǎn)品,其中所述第一條件為所述自旋線程計數(shù)值小于自旋線程計數(shù)門限值。
13.根據(jù)權(quán)利要求11的計算機程序產(chǎn)品,其中所述第二條件為所述自旋線程計數(shù)值大于或等于自旋線程計數(shù)門限值。
14.根據(jù)權(quán)利要求11的計算機程序產(chǎn)品,還包括用于比較所述自旋線程計數(shù)值與自旋線程計數(shù)門限值,以選擇自旋狀態(tài)或睡眠狀態(tài)的部分。
15.根據(jù)權(quán)利要求14的計算機程序產(chǎn)品,還包括用于根據(jù)線程在所述互斥鎖上睡眠之后獲取所述互斥鎖所需的獲取嘗試次數(shù),調(diào)整所述自旋線程計數(shù)門限值的部分。
16.根據(jù)權(quán)利要求14的計算機程序產(chǎn)品,還包括用于如果在所述互斥鎖上睡眠之后線程獲取所述互斥鎖相對較慢,則減小所述自旋線程計數(shù)門限值的部分。
17.根據(jù)權(quán)利要求14的計算機程序產(chǎn)品,還包括用于如果在所述互斥鎖上睡眠之后線程獲取所述互斥鎖相對較快,則增加所述自旋線程計數(shù)門限值的部分。
18.一種用于管理互斥鎖的裝置,包括用于保持對于正在互斥鎖上自旋的線程的數(shù)目的自旋線程計數(shù)值的部分;用于第一線程嘗試獲取該互斥鎖的部分;以及用于作為對確定該互斥鎖已經(jīng)被第二線程獲取的響應(yīng),根據(jù)所述自旋線程計數(shù)值,確定第一線程進入自旋狀態(tài)還是睡眠狀態(tài)的部分。
19.根據(jù)權(quán)利要求18的裝置,還包括用于如果所述自旋線程計數(shù)值小于自旋線程計數(shù)門限值,則進入自旋狀態(tài)的部分;以及用于如果所述自旋線程計數(shù)值大于或等于自旋線程計數(shù)門限值,則進入睡眠狀態(tài)的部分。
20.根據(jù)權(quán)利要求18的裝置,還包括用于比較所述自旋線程計數(shù)值與自旋線程計數(shù)門限值,以選擇自旋狀態(tài)或睡眠狀態(tài)的部分;以及用于根據(jù)線程在所述互斥鎖上睡眠之后獲取所述互斥鎖所需的獲取嘗試次數(shù),調(diào)整所述自旋線程計數(shù)門限值的部分。
全文摘要
提供了一種在數(shù)據(jù)處理系統(tǒng)中管理互斥鎖的方法。對于每個互斥鎖,保持對于正在自旋同時等待獲取互斥鎖的線程的數(shù)目的自旋線程計數(shù)。如果線程嘗試獲取鎖定的互斥鎖,則根據(jù)限制性條件以及在嘗試獲取過程中正在自旋的線程的數(shù)目,線程進入自旋狀態(tài)或睡眠狀態(tài)。另外,在已經(jīng)在互斥鎖上睡眠之后線程在互斥鎖上自旋所需的相對時間長度,可以用來調(diào)節(jié)允許在互斥鎖上自旋的線程的數(shù)目。
文檔編號G06F9/52GK1601478SQ20041005493
公開日2005年3月30日 申請日期2004年7月26日 優(yōu)先權(quán)日2003年9月25日
發(fā)明者喬爾·H·肖普 申請人:國際商業(yè)機器公司