欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于在被爭奪的互斥鎖上被動(dòng)態(tài)限定的自旋線程的方法與系統(tǒng)的制作方法

文檔序號(hào):6411728閱讀:150來源:國知局
專利名稱:用于在被爭奪的互斥鎖上被動(dòng)態(tài)限定的自旋線程的方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種改進(jìn)的數(shù)據(jù)處理系統(tǒng),更具體地,涉及一種用于多進(jìn)程協(xié)調(diào)的方法與裝置。再具體地講,本發(fā)明提供了一種用于在任務(wù)管理或控制過程中使用互斥鎖的進(jìn)程調(diào)度或資源分配的方法與裝置。
背景技術(shù)
現(xiàn)代操作系統(tǒng)支持多道程序,由此看起來在具有單一的中央處理單元(CPU)或者可能在對(duì)稱多處理器(SMP)機(jī)器中的多個(gè)CPU的單一計(jì)算設(shè)備上有多個(gè)程序并發(fā)執(zhí)行。通過同時(shí)使用串行化執(zhí)行來達(dá)到并發(fā)執(zhí)行,也被稱為“時(shí)間分片”設(shè)備的操作系統(tǒng)允許多個(gè)程序中的一個(gè)在某限定時(shí)間段(即時(shí)間片)內(nèi)獨(dú)占地運(yùn)行,然后跟隨著多個(gè)程序中另一個(gè)不同的程序獨(dú)占執(zhí)行所使用的時(shí)間段。因?yàn)樵诔绦蛑g的切換發(fā)生得很快,所以看起來程序是并發(fā)運(yùn)行的,雖然實(shí)際上它們是串行運(yùn)行的。當(dāng)完成對(duì)于一個(gè)程序的時(shí)間片時(shí),該程序被置入掛起或“睡眠”狀態(tài),并且另一程序“蘇醒”并開始運(yùn)行。
提高單一程序或單一進(jìn)程的性能的一種方法是將該程序或進(jìn)程分為指令路徑,經(jīng)常被稱為“線程”,這些執(zhí)行路徑看起來是并發(fā)執(zhí)行的。這樣的程序或進(jìn)程一般被稱為“多任務(wù)”或“多線程”;操作系統(tǒng)為每個(gè)線程提供時(shí)間片,在該時(shí)間片內(nèi)其具有對(duì)CPU的獨(dú)占使用。操作系統(tǒng)一般提供內(nèi)置的機(jī)制用來在并發(fā)程序和/或線程之間以非常迅速與高效的方式進(jìn)行切換;對(duì)于多線程某些類型的CPU提供對(duì)操作系統(tǒng)的直接的硬件支持。因?yàn)楸景l(fā)明的思路同樣適用于并發(fā)線程和并發(fā)程序,其可能包括單一線程或多個(gè)線程,所以所使用的名詞“線程”可以指非多線程程序或者在多線程環(huán)境下的一個(gè)線程。
當(dāng)線程執(zhí)行時(shí),它們必然需要訪問數(shù)據(jù)處理系統(tǒng)中的資源,諸如存儲(chǔ)器、數(shù)據(jù)結(jié)構(gòu)、文件、或其他資源。用來被多個(gè)線程共享的資源并且以如下方式共享要保護(hù)包含在該資源中或通過該資源傳遞的數(shù)據(jù)的完整性;作到這一點(diǎn)的一種方式是通過對(duì)競爭共享資源的線程的串行化執(zhí)行。當(dāng)?shù)谝痪€程已經(jīng)在使用資源時(shí),需要該資源的第二線程必須等待,直至該資源不再被使用,這一般作為第一線程已經(jīng)成功完成其對(duì)該資源的使用的結(jié)果而發(fā)生。
操作系統(tǒng)一般提供多種機(jī)制來協(xié)調(diào)多個(gè)線程對(duì)共享資源的使用。雖然應(yīng)用程序開發(fā)者能夠創(chuàng)建其自己的特定機(jī)制,以確保對(duì)共享資源的串行化訪問,但是應(yīng)用程序開發(fā)者一般使用由操作系統(tǒng)提供或者在標(biāo)準(zhǔn)軟件庫中提供的機(jī)制,以將共享資源的控制邏輯嵌入多個(gè)線程之中。使用操作系統(tǒng)特有的機(jī)制是有利的,這是因?yàn)槠湓试S操作系統(tǒng)將有關(guān)對(duì)于資源的競爭的信息集成到其時(shí)間分片功能之中。因此,操作系統(tǒng)根據(jù)其需求及其對(duì)資源的競爭分配時(shí)間片給線程,而不是通過使用嚴(yán)格周期性的時(shí)間片。
用來串行化對(duì)共享資源的訪問的常用機(jī)制是互斥鎖,其為具有兩個(gè)狀態(tài)的簡單鎖鎖定與未鎖定。該鎖一般以通過軟件子例程或例程標(biāo)準(zhǔn)庫中的模塊而創(chuàng)建、銷毀、或修改的數(shù)據(jù)對(duì)象或數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)。互斥鎖可以邏輯地關(guān)聯(lián)于共享資源,從而成功鎖定該互斥鎖的線程被稱為互斥鎖的當(dāng)前所有人;只有占有特定互斥鎖的線程進(jìn)入訪問與該特定互斥鎖相關(guān)聯(lián)的共享資源,并且只有占有該特定互斥鎖的線程解鎖該特定互斥鎖。因此,訪問共享資源的線程內(nèi)的臨界代碼部分被經(jīng)鎖定的互斥鎖的調(diào)用以及解鎖該同一互斥鎖的調(diào)用所包圍。如果線程嘗試鎖定互斥鎖并且失敗,則在其進(jìn)入訪問該共享資源的臨界代碼部分之前,必須等待直至其能夠鎖定該互斥鎖。如果互斥鎖分配在由協(xié)調(diào)的進(jìn)程所共享的存儲(chǔ)器之內(nèi),則互斥鎖可以用來在同一進(jìn)程內(nèi)或者跨越多個(gè)進(jìn)程來使多個(gè)線程同步。
在不能獲取互斥鎖之后線程等待互斥鎖的方式取決于實(shí)現(xiàn)互斥鎖機(jī)制的方式。廣泛使用的鎖有三種阻塞鎖(blocking lock)、自旋鎖(spin lock)、以及阻塞鎖與自旋鎖的某種組合類型。如果已經(jīng)獲取了互斥鎖,并且另一線程請(qǐng)求鎖定該互斥鎖,則實(shí)現(xiàn)為阻塞鎖的互斥鎖使該等待線程不再是可運(yùn)行的或者使其掛起,即進(jìn)入“睡眠”。相反,自旋鎖不將等待線程置入睡眠。而是等待中的線程執(zhí)行循環(huán),由此反復(fù)請(qǐng)求該鎖,直至其被當(dāng)前擁有該互斥鎖的線程釋放;該循環(huán)可以包括空的迭代循環(huán),即“忙循環(huán)”或“忙等待”,其對(duì)一變量進(jìn)行增量或減量,使得該線程不會(huì)馬上重新請(qǐng)求該互斥鎖,而是等待一段時(shí)間,該時(shí)間取決于迭代循環(huán)的長度。
與阻塞鎖或自旋鎖不同,互斥鎖經(jīng)常被實(shí)現(xiàn)為具有超時(shí)退出的自旋鎖,其為組合了阻塞鎖的特點(diǎn)與自旋鎖的特點(diǎn)的鎖。具有超時(shí)退出的自旋鎖自旋(spin)一段有限的時(shí)間,同時(shí)允許線程嘗試再次獲得該鎖;如果該有限的時(shí)間段過期了而沒有獲得該鎖,則該線程阻塞。該超時(shí)退出的時(shí)間段一般通過在忙等待循環(huán)中執(zhí)行固定數(shù)目的迭代來控制。除了鎖定例程與解鎖例程之外,軟件庫還經(jīng)常包含“試鎖”子例程,其中如果未獲取互斥鎖,則控制被返回到請(qǐng)求子例程,即不會(huì)強(qiáng)迫請(qǐng)求例程以等待互斥鎖變?yōu)榭捎谩?br> 阻塞與自旋的動(dòng)作具有其優(yōu)缺點(diǎn)。阻塞迅速地掛起等待線程的執(zhí)行,當(dāng)時(shí)阻塞的動(dòng)作可能會(huì)掛起不久將獲得鎖的線程,并且掛起線程意味著相對(duì)不小的費(fèi)用,例如,必須保存該線程的執(zhí)行上下文。在另一方面,自旋鎖消耗資源,諸如CPU時(shí)間與存儲(chǔ)器高速緩存線路,當(dāng)時(shí)如果合理地選擇自旋時(shí)間段的長度,則等待線程經(jīng)常會(huì)相對(duì)較快地獲得互斥鎖,由此使得自旋操作能夠比阻塞操作消耗較少的計(jì)算資源。
在自旋與阻塞之間的選擇取決于許多因素,尤其是線程在設(shè)備上執(zhí)行的計(jì)算環(huán)境。因此,以下做法是有利的動(dòng)態(tài)地調(diào)整線程在互斥鎖的自旋與阻塞之間選擇的方式。尤其有利的是為線程提供以下能力當(dāng)線程在被爭奪的互斥鎖的自旋與阻塞之間選擇時(shí),考慮被爭奪的互斥鎖的當(dāng)前特點(diǎn)。

發(fā)明內(nèi)容
提供了一種在數(shù)據(jù)處理系統(tǒng)中管理互斥鎖的方法。對(duì)于每個(gè)互斥鎖,保持對(duì)于正在自旋同時(shí)等待獲取互斥鎖的線程的數(shù)目的自旋線程計(jì)數(shù)。如果線程嘗試獲取鎖定的互斥鎖,則根據(jù)限制性條件以及在嘗試獲取過程中正在自旋的線程的數(shù)目,線程進(jìn)入自旋狀態(tài)或睡眠狀態(tài)。另外,在已經(jīng)在互斥鎖上睡眠之后線程在互斥鎖上自旋所需的相對(duì)時(shí)間長度,可以用來調(diào)節(jié)允許在互斥鎖上自旋的線程的數(shù)目。


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