專利名稱:用于信息處理的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及一種用于改進軟件鎖的系統(tǒng)和方法。更具體地,本申請涉及一種用于為正等待軟件鎖的線程保留該鎖的系統(tǒng)和方法。
背景技術(shù):
在多處理環(huán)境中,軟件鎖被用于串行化對資源的訪問。如此處所使用的,“線程”指代可獨立于程序的其它部分執(zhí)行的程序的一部分??梢源嬖谕瑫r進行操作的多個程序,包括操作系統(tǒng),并且這些程序中的每個可以具有多個線程。當線程需要訪問串行化的資源時,軟件鎖被使用。軟件鎖提供了一種機制,使得一個線程能夠使用資源(例如,寫到共享存儲器位置等)。盡管傳統(tǒng)的鎖提供了一種用于訪問資源的受控制裝置,但是使用傳統(tǒng)鎖遇到的一個挑戰(zhàn)在于,線程可能意外地急需訪問特定資源。盡管在多處理器環(huán)境中出現(xiàn)此情況,但在某些條件下在單處理器環(huán)境中也可出現(xiàn)此情況。
圖1是潛在地急需關(guān)鍵資源的過程的典型的加鎖算法的現(xiàn)有技術(shù)描述。在所示出的示例中,第二線程急需特定資源。在100開始第一線程的處理部分的描述,而在101開始第二線程的處理部分的描述。在步驟105,第一線程獲得特定鎖并接著通過執(zhí)行使用被該鎖控制的資源的工作來開始步驟110。
在第一線程已獲得鎖之后、但是在第一線程已釋放該鎖之前的某個時間,第二線程請求同一軟件鎖(步驟115)。在步驟120,鎖管理器注意到該鎖已被(第一線程)獲得,于是在步驟125,第二線程被置為睡眠,并被添加到等待隊列130。在第二線程被置為睡眠并被添加到等待隊列之后的某個時間,第一線程釋放該鎖(步驟135)。第一線程釋放該鎖導致第二線程喚醒(步驟140),并且第二線程從等待隊列130中移除。在第二線程正在喚醒的時候,在步驟145第一線程執(zhí)行不需要由軟件鎖控制的共享資源的工作。但是,在第二線程完全喚醒并請求該鎖(步驟160)之前,第一線程再次需要訪問共享資源,并在步驟150再次請求鎖。因為該鎖可用,并且第一線程在第二線程之前請求該鎖,所以在步驟155第一線程重新獲得該鎖。
再次地,鎖管理器拒絕將鎖給第二線程(步驟165),因為該鎖已被另一過程(第一線程)所獲得。接著第二線程被置回為睡眠,并被添加到等待隊列(步驟170)。不幸的是,所述序列可能被反復重復(步驟175和180),由此使第二線程變得急需,使得它必須等待過量時間來獲得由所述鎖控制的共享資源。如前所述,盡管在多處理器環(huán)境中出現(xiàn)圖1中描述的情況,但在某些條件下在單處理器環(huán)境中也可出現(xiàn)此情況。如上所述,第二線程可能變得急需該鎖的一個原因是因為第一線程是運行中的線程,而第二線程被置為睡眠。運行中的線程所具有的優(yōu)于睡眠線程的優(yōu)勢在于,它可以經(jīng)常在睡眠線程可以喚醒并請求該鎖之前完成其處理并請求該鎖。通過使用類似分派程序,第二線程將在喚醒時優(yōu)選地被分派給CPU2。不過,如果CPU2繁忙,則第二線程可被重新分配給在第二線程喚醒之時空閑的不同CPU。再一次地,將第二線程重新分配給空閑的CPU需要額外的時間,這向第一線程提供了完成其工作并重新請求該鎖的額外優(yōu)勢。
因此,所需要的是一種防止一個過程急需共享資源的系統(tǒng)和方法。還需要的是一種為等待過程保留鎖從而使它具有好得多的機會來及時地獲得該鎖的系統(tǒng)和方法。
發(fā)明內(nèi)容
已經(jīng)發(fā)現(xiàn),一種為等待線程保留軟件鎖的系統(tǒng)和方法解決了前述挑戰(zhàn)。當軟件鎖被第一過程(線程)釋放時,正等待由所述軟件鎖控制的相同資源的第二線程被喚醒。此外,為所述第二線程建立對所述軟件鎖的保留。
在建立所述保留之后,如果所述鎖可用,并由除了所述第二線程之外的線程所請求,那么,如果所述請求線程的優(yōu)先級并未優(yōu)于所述第二線程,則所述請求線程被拒絕,并且所述請求線程被添加到等待隊列并被置為睡眠。此外,所述保留被清除。以此方式,如果所述第二線程花費過量時間來請求所述鎖,則所述保留不會永久地阻礙其它過程(線程)。在所述保留已被清除后,所述鎖將被授予請求所述鎖的下一線程。盡管所述第二線程未被保證立刻獲得所述鎖,但這極大地提高了所述第二線程在合理的時間量內(nèi)獲得所述鎖的機會。
當然,如果所述第二線程是在所述保留已被設(shè)置之后請求所述鎖的下一線程(或者如果所述第二線程是在所述保留已被設(shè)置之前請求所述鎖),則所述第二線程獲得所述軟件鎖。如果已為所述第二線程設(shè)置了保留,則所述保留被清除。
前述內(nèi)容是摘要,并因此按照需要包含了細節(jié)的簡化、概括和刪節(jié);結(jié)果,本領(lǐng)域技術(shù)人員將理解,所述摘要僅是說明,而不會以任何方式進行限制。僅由權(quán)利要求限定的本發(fā)明的其它方面、創(chuàng)造性特征和優(yōu)點將在以下闡述的非限制性詳細描述中變得明顯。
通過參考附圖,本發(fā)明可被更好地理解,并且本發(fā)明的多個目的、特征和優(yōu)點對本領(lǐng)域技術(shù)人員更加明顯。
圖1是潛在地急需關(guān)鍵資源的過程的典型的加鎖算法的現(xiàn)有技術(shù)描述;圖2是示出由各種處理器執(zhí)行并通過軟件鎖共享公共資源的過程的高級圖;圖3是示出對保留的使用如何防止急需嘗試使用鎖的過程的圖;圖4是示出當接收到對于鎖的請求時采取的步驟的流程圖;圖5是示出當保持鎖的過程釋放該鎖時采取的步驟的流程圖;以及圖6示出信息處理系統(tǒng)601,其是能夠執(zhí)行此處所述的計算操作的計算機系統(tǒng)的簡化示例。
具體實施例方式
以下內(nèi)容旨在提供本發(fā)明的示例的詳細描述,并且不應(yīng)被用來限制發(fā)明本身。而是,任何數(shù)量的變體均可落入在權(quán)利要求中所限定的本發(fā)明的范圍。
圖1是潛在地急需關(guān)鍵資源的過程的典型的加鎖算法的現(xiàn)有技術(shù)描述。在以上背景技術(shù)部分中可找到對圖1的描述。
圖2-5示出避免了急需關(guān)鍵資源的過程的加鎖算法。當鎖被釋放并且存在等待者時,喚醒呼叫在鎖結(jié)構(gòu)中設(shè)置保留位。從等待列表(等待隊列)中喚醒的線程將在線程控制框中具有位組,指示該線程曾在該鎖的等待列表上。所喚醒線程嘗試獲得鎖并將清除等待列表位。在鎖獲得期間,如果鎖是空閑的且鎖結(jié)構(gòu)具有等待列表位組,則將進行檢查,以看看所述線程是否具有等待列表位組。如果線程具有等待列表位組,則它將被允許嘗試獲得該鎖,并且線程等待列表位將被清除(不管是否獲得該鎖)。如果線程在其線程控制結(jié)構(gòu)中沒有等待列表位組,則它將清除鎖結(jié)構(gòu)的鎖保留位,將進入睡眠,并且它將被添加到等待列表(等待隊列)。
注冊表可被用于確定哪些鎖將使用上文和圖2-5中所述的算法,在或者所述算法可應(yīng)用于所有鎖。由于該算法的開銷非常小,并因為檢查和設(shè)置保留位檢查中涉及的開銷可以忽略,特別是因為等待列表(等待隊列)無論如何要被檢查,所以將該算法應(yīng)用于所有鎖是可能的。此外,額外的分派開銷也是可以忽略的,而且可由更復雜的實現(xiàn)達到的任何小的節(jié)約將可能被該復雜實現(xiàn)所需的額外開銷所蓋過。此外,通過將保留位作為鎖本身存儲在同一高速緩存線中,可以進一步提高效率。此外,如此處更詳細地解釋的,僅當線程在等待列表上等待,并被實現(xiàn)為喚醒例程的一部分時,才執(zhí)行鎖保留。
圖2是示出由各種處理器執(zhí)行并通過軟件鎖共享公共資源的過程的高級圖。
背景技術(shù):
部分中描述的挑戰(zhàn)(見以上圖1及其描述)在多處理系統(tǒng)中更可能出現(xiàn),在多處理系統(tǒng)中不同處理器被用于執(zhí)行不同線程,每個線程都需要訪問共享資源。圖2描述了此多處理環(huán)境。
硬件200在許多組件中包括多個處理器(CPU1(210)、CPU2(220)和CPU3(230))。這些處理器中的每個可執(zhí)行一個或多個線程。在所示出的示例中,CPU1(210)在執(zhí)行第一線程(線程A),而CPU2(220)在執(zhí)行第二線程(線程B)。這些線程共享各種共享資源,通過一個或多個軟件鎖來控制對所述共享資源的訪問。
操作系統(tǒng)或軟件應(yīng)用250通過使用軟件鎖260來管理對共享資源270的訪問。當線程之一獲得該鎖時,接著該線程可訪問和使用共享資源270。如果軟件鎖已被第一線程獲得,則請求線程被添加到等待隊列275。在一實施例中,等待隊列275是FIFO隊列。更具體地,在此實施例中,具有同一優(yōu)先級的線程基于它們到達隊列的順序被排序(FIFO)。在此實施例中,較高優(yōu)先級的線程被放置在隊列前面,而較低優(yōu)先級的線程被放置在隊列末端。當?shù)谝痪€程釋放該鎖時,等待隊列275中列出的第一線程被喚醒,并且使用保留數(shù)據(jù)結(jié)構(gòu)280來為喚醒線程建立保留。如果當該保留就緒時另一線程嘗試獲得該鎖,則該請求線程被置為睡眠,并被添加到等待隊列。在一實施例中,在其它線程嘗試獲得該鎖之后,該保留被清除。
圖3是示出對保留的使用如何防止急需嘗試使用鎖的過程的圖。圖3中所示的處理和圖1中所示的現(xiàn)有技術(shù)描述中示出的處理之間的比較揭示出本發(fā)明減小或消除了急需共享資源的線程。
在300開始第一線程的處理部分的描述,而在301開始第二線程的處理部分的描述。在步驟305,第一線程獲得特定鎖并接著通過執(zhí)行使用被該鎖控制的資源的工作來開始步驟310。在第一線程已獲得鎖之后、但是在第一線程已釋放該鎖之前的某個時間,第二線程請求同一軟件鎖(步驟315)。在步驟320,鎖管理器注意到該鎖已被(第一線程)獲得,于是在步驟325,第二線程被置為睡眠,并被添加到等待隊列275。
在第二線程被置為睡眠并被添加到等待隊列之后的某個時間,第一線程釋放該鎖(步驟340)。第一線程釋放該鎖導致第二線程喚醒(步驟345),并且第二線程從等待隊列275中移除。此外,鎖管理器為第二線程設(shè)置對該鎖的保留。在第二線程正在喚醒的時候,在步驟350第一線程執(zhí)行不需要由軟件鎖控制的共享資源的工作。但是,在第二線程完全喚醒并請求該鎖(步驟365)之前,第一線程再次需要訪問共享資源,并在步驟355再次請求鎖。不過即使該鎖可用,但是鎖管理器注意到已為另一線程設(shè)置了對該鎖的保留。鎖管理器比較第一線程(進行請求的線程)的線程標識符和存儲在保留280中的線程標識符(為第二線程設(shè)置的)。由于兩個線程標識符不匹配,所以第一線程被置為睡眠,并被添加到等待隊列,并且保留被清除(步驟360)?,F(xiàn)在,當?shù)诙€程喚醒并在步驟365請求該鎖時,該鎖仍舊可用,并且第二線程能夠在步驟370獲得該鎖。同樣,當?shù)诙€程釋放該鎖時,將為第一線程建立保留,因為第一線程正在睡眠并在等待隊列中等待,這樣給第一線程更好的機會來獲得該鎖。
圖4是示出當接收到對于鎖的請求時采取的步驟的流程圖。處理在400開始,在步驟405,接收對鎖的請求。確定所請求的鎖是否被保留(決策410)。如果所請求的鎖被保留,則決策410分叉到其上的“是”分支415,另外確定該鎖是否被請求線程所保留(決策420)。通過比較請求線程的標識符和對應(yīng)于保留280的線程標識符而做出此確定。如果鎖被請求線程所保留,則決策420分叉到其上的“是”分支425,在步驟430,保留280被清除,并且在所述處理在步驟495結(jié)束之前,在步驟445通過把請求者的線程標識符寫到鎖數(shù)據(jù)結(jié)構(gòu)260而由請求者獲得該鎖。
返回決策420,如果該鎖被保留,但不是由請求線程所保留,則決策420分叉到其上的“否”分支455,在步驟460,保留280被清除,并且在所述處理在499結(jié)束之前,請求線程被置為睡眠,并被添加到等待隊列275。返回決策410,如果該鎖未被保留,則決策410分叉到其上的“否”分支470,另外確定該鎖是否當前可用(決策475)。如果該鎖當前可用,則決策475分叉到其上的“是”分支480,在所述處理在495結(jié)束之前,在步驟445通過把請求者的線程標識符寫到鎖數(shù)據(jù)結(jié)構(gòu)260而由請求者獲得該鎖。另一方面,如果該鎖當前不可用,則決策475分叉到其上的“否”分支485,在所述處理在499結(jié)束之前,在步驟490,請求者被置為睡眠,并被添加到等待隊列275。
圖5是示出當保持鎖的線程釋放該鎖時采取的步驟的流程圖。處理在500開始,在步驟510,保持鎖260的第一線程釋放該鎖。在步驟520,鎖260被清除,使得該鎖不再被分配給該線程。
確定等待隊列275中是否存在正等待該鎖的一個或多個線程(決策530)。如果不存在正等待該鎖的線程,則決策530分叉到其上的“否”分支535,其繞過剩余步驟,并且處理在595結(jié)束。另一方面,如果一個或多個線程正等待該鎖,則決策530分叉到其上的“是”分支540,在步驟550,在等待隊列275中列出的下一線程被選擇。在步驟560,通過把所選擇線程的標識符寫到保留數(shù)據(jù)結(jié)構(gòu)280而為所選擇線程設(shè)置保留。在步驟570,所選擇線程被喚醒,并且在步驟580從等待隊列275中移除所選擇線程。隨后處理在595結(jié)束。
圖6示出信息處理系統(tǒng)601,其是能夠執(zhí)行此處所述的計算操作的計算機系統(tǒng)的簡化示例。計算機系統(tǒng)601包括耦合于主機總線602的處理器600。二級(L2)高速緩沖存儲器604也耦合于主機總線602。主機到PCI橋606耦合于主存儲器608,包括高速緩沖存儲器和主存儲器控制功能,并提供總線控制來處理在PCI總線610、處理器600、L2高速緩存604、主存儲器608和主機總線602之間的傳輸。主存儲器608耦合于主機到PCI橋606以及主機總線602。僅由主機處理器600使用的設(shè)備(諸如LAN卡630)耦合于PCI總線610。服務(wù)處理器接口和ISA訪問通道612提供PCI總線610和PCI總線614之間的接口。以此方式,PCI總線614與PCI總線610隔離。諸如閃速存儲器618的設(shè)備耦合于PCI總線614。在一實現(xiàn)中,閃速存儲器618包括BIOS代碼,其引入了用于多種低級系統(tǒng)功能和系統(tǒng)引導功能的必要的處理器可執(zhí)行代碼。
PCI總線614提供用于由主機處理器600和服務(wù)處理器616共享的多種設(shè)備(例如包括閃速存儲器618)的接口。PCI到ISA橋635提供總線控制來處理在PCI總線614、ISA總線640、通用串行總線(USB)功能645和電力管理功能655之間的傳輸,并且可包括未示出的其它功能單元,諸如實時時鐘(RTC)、DMA控制、中斷支持和系統(tǒng)管理總線支持。非易失性RAM 620附接于ISA總線640。服務(wù)處理器616包括用于在初始化步驟期間與處理器600通信的JTAG和I2C總線622。JTAG/I2C總線622也耦合于L2高速緩存604、主機到PCI橋606和主存儲器608,其提供處理器、服務(wù)處理器、L2高速緩存、主機到PCI橋以及主存儲器之間的通信路徑。服務(wù)處理器616也訪問用于給信息處理設(shè)備601斷電的系統(tǒng)電力資源。
外圍設(shè)備和輸入/輸出(I/O)設(shè)備可附接于多種接口(例如,耦合于ISA總線640的并行接口662、串行接口664、鍵盤接口668和鼠標接口670)。可替換地,許多I/O接口可被附接于ISA總線640的超級I/O控制器(未示出)所容納。
為了將計算機系統(tǒng)601附接于另一計算機系統(tǒng)以便在網(wǎng)絡(luò)上拷貝文件,LAN卡630耦合于PCI總線610。類似地,為了將計算機系統(tǒng)601連接于ISP以便使用電話線路連接而連接到因特網(wǎng),調(diào)制解調(diào)器675連接于串行端口664和PCI到ISA橋635。
盡管圖6中所述的計算機系統(tǒng)能夠執(zhí)行此處所述的過程,但該計算機系統(tǒng)是計算機系統(tǒng)的一個簡單示例。本領(lǐng)域技術(shù)人員將理解,許多其它計算機系統(tǒng)設(shè)計能夠執(zhí)行此處所述的過程。
本發(fā)明的優(yōu)選實現(xiàn)之一是客戶應(yīng)用,即,代碼模塊中的指令集(程序代碼)或其它描述功能的材料,其例如可以駐留于計算機的隨機存取存儲器中。在被計算機需要之前。指令集可被存儲在另一計算機存儲器中,例如在硬盤驅(qū)動器中或在可移除存儲器(諸如光盤(最終在CD-ROM中使用)或軟盤(最終在軟盤驅(qū)動器中使用))中,或者經(jīng)由因特網(wǎng)或其它計算機網(wǎng)絡(luò)下載。因此,本發(fā)明可被實現(xiàn)為在計算機中使用的計算機程序產(chǎn)品。此外,盡管所述的各種方法在由軟件選擇性地啟動或重新配置的通用計算機中便利地實現(xiàn),但本領(lǐng)域普通技術(shù)人員也將認識到,所述方法可用硬件、固件或被構(gòu)建執(zhí)行所需方法步驟的更專用的裝置來執(zhí)行。描述功能的材料是將功能給予機器的信息。描述功能的材料包括但不限于計算機程序、指令、規(guī)則、事實、可計算功能的定義、對象和數(shù)據(jù)結(jié)構(gòu)。
盡管已示出和描述了本發(fā)明的特定實施例,但是對于本領(lǐng)域技術(shù)人員來說將很明顯,基于此處的講授,可以做出改變和修改而不會背離本發(fā)明及其更廣泛的方面。因此,權(quán)利要求將在其范圍內(nèi)包含所有這樣的改變和修改,其均落在本發(fā)明的真正精神和范圍內(nèi)。此外,應(yīng)理解,本發(fā)明僅由權(quán)利要求所限定。本領(lǐng)域技術(shù)人員將理解,如果預(yù)定了所引入的權(quán)利要求要素的特定數(shù)量,則該預(yù)定將在權(quán)利要求中明確闡明,并且在沒有這樣的闡明的情況下不存在任何限制。對于非限制性示例,作為對理解的幫助,權(quán)利要求包含對介紹性短語“至少一個”以及“一個或多個”的使用,以便介紹權(quán)利要求要素。不過,對這些短語的使用不應(yīng)被解釋為暗示由不定冠詞“a”或“an”對權(quán)利要求要素的介紹把包含這些被介紹的權(quán)利要求要素的任何特定權(quán)利要求限制為僅包含一個這樣的要素的發(fā)明,即使當同一權(quán)利要求包括介紹性短語“一個或多個”或“至少一個”以及諸如“a”或“an”的不定冠詞時也是如此;在權(quán)利要求中使用定冠詞時也是如此。
權(quán)利要求
1.一種計算機實現(xiàn)的方法,包括由第一線程釋放軟件鎖;在所述釋放之時標識正等待所述軟件鎖的第二線程;響應(yīng)于所述標識由所述第二線程建立對所述軟件鎖的保留;響應(yīng)于所述釋放喚醒所述第二線程;在建立所述保留之后并在所述軟件鎖已被所述第二線程獲得之前,接收不是所述第二線程的第一請求線程對于所述軟件鎖的第一請求;以及響應(yīng)于所述第二線程具有等于或優(yōu)于所述第一請求線程的優(yōu)先級,拒絕所述請求,并將所述第一請求線程置為睡眠。
2.根據(jù)權(quán)利要求1所述的方法,還包括響應(yīng)于接收到所述第一請求,清除所述保留。
3.根據(jù)權(quán)利要求1所述的方法,還包括在所述清除之后并在所述軟件鎖已經(jīng)被所述第二線程請求之前,接收不是所述第二線程的第二請求線程對于所述軟件鎖的第二請求;以及響應(yīng)于所述第二請求,允許所述第二請求線程獲得所述軟件鎖。
4.根據(jù)權(quán)利要求1所述的方法,還包括在建立所述保留之后,接收所述第二線程對于所述軟件鎖的請求;響應(yīng)于所述請求,允許所述第二線程獲得所述軟件鎖;以及響應(yīng)于接收到所述請求,清除所述保留。
5.根據(jù)權(quán)利要求1所述的方法,還包括在建立所述保留之后,接收請求線程對于所述軟件鎖的請求;比較所述請求線程的線程標識符和所述第二線程的線程標識符;響應(yīng)于所述請求線程的線程標識符等于所述第二線程的線程標識符允許所述請求線程獲得所述軟件鎖;以及清除所述保留;以及響應(yīng)于所述請求線程的線程標識符不等于所述第二線程的線程標識符拒絕所述請求;將所述請求線程置為睡眠;以及清除所述保留。
6.根據(jù)權(quán)利要求1所述的方法,還包括從等待隊列中選擇對應(yīng)于所述第二線程的線程標識符,其中所述等待隊列包括對應(yīng)于正等待所述軟件鎖的線程的一個或多個線程標識符;以及從所述等待隊列中移除所選擇的線程標識符。
7.根據(jù)權(quán)利要求1所述的方法,還包括由所述第二線程釋放所述軟件鎖;在所述軟件鎖已經(jīng)被所述第二線程釋放之后,接收請求線程對于所述軟件鎖的請求;響應(yīng)于所述軟件鎖未被保留響應(yīng)于所述軟件鎖可用,允許所述請求線程獲得所述軟件鎖;以及響應(yīng)于所述軟件鎖不可用,將所述請求線程置為睡眠,并將所述請求線程的標識符添加到等待隊列;以及響應(yīng)于所述軟件鎖被保留響應(yīng)于所述保留是為了所述請求線程,清除所述保留,并允許所述請求線程獲得所述軟件鎖;以及響應(yīng)于所述保留不是為了所述請求線程,清除所述保留,將所述請求線程置為睡眠,并將所述請求線程的標識符添加到所述等待隊列。
8.一種信息處理系統(tǒng),包括一個或多個處理器;可由所述處理器訪問的存儲器;存儲于所述存儲器中并由所述處理器執(zhí)行的多個線程,包括第一線程和第二線程;控制對資源的訪問的軟件鎖;以及指令集,其被所述處理器執(zhí)行用來執(zhí)行以下動作由所述第一線程釋放所述軟件鎖;在所述釋放之時標識正等待所述軟件鎖的第二線程;響應(yīng)于所述標識由所述第二線程建立對所述軟件鎖的保留;響應(yīng)于所述釋放喚醒所述第二線程;在建立所述保留之后并在所述軟件鎖已被所述第二線程獲得之前,接收不是所述第二線程的第一請求線程對于所述軟件鎖的第一請求;以及響應(yīng)于所述第二線程具有等于或優(yōu)于所述第一請求線程的優(yōu)先級,拒絕所述請求,并將所述第一請求線程置為睡眠。
9.根據(jù)權(quán)利要求8所述的信息處理系統(tǒng),還包括響應(yīng)于接收到所述第一請求,清除所述保留。
10.根據(jù)權(quán)利要求8所述的信息處理系統(tǒng),還包括在所述清除之后并在所述軟件鎖已經(jīng)被所述第二線程請求之前,接收不是所述第二線程的第二請求線程對于所述軟件鎖的第二請求;以及響應(yīng)于所述第二請求,允許所述第二請求線程獲得所述軟件鎖。
11.根據(jù)權(quán)利要求8所述的信息處理系統(tǒng),還包括在建立所述保留之后,接收所述第二線程對于所述軟件鎖的請求;響應(yīng)于所述請求,允許所述第二線程獲得所述軟件鎖;以及響應(yīng)于接收到所述請求,清除所述保留。
12.根據(jù)權(quán)利要求8所述的信息處理系統(tǒng),還包括在建立所述保留之后,接收請求線程對于所述軟件鎖的請求;比較所述請求線程的線程標識符和所述第二線程的線程標識符;響應(yīng)于所述請求線程的線程標識符等于所述第二線程的線程標識符允許所述請求線程獲得所述軟件鎖;以及清除所述保留;以及響應(yīng)于所述請求線程的線程標識符不等于所述第二線程的線程標識符拒絕所述請求;將所述請求線程置為睡眠;以及清除所述保留。
13.根據(jù)權(quán)利要求8所述的信息處理系統(tǒng),還包括從等待隊列中選擇對應(yīng)于所述第二線程的線程標識符,其中所述等待隊列包括對應(yīng)于正等待所述軟件鎖的線程的一個或多個線程標識符;以及從所述等待隊列中移除所選擇的線程標識符。
全文摘要
提供了一種用于為等待線程保留軟件鎖的系統(tǒng)和方法。當軟件鎖被第一線程釋放時,正等待由所述軟件鎖控制的相同資源的第二線程被喚醒。此外,為所述第二線程建立對所述軟件鎖的保留。在建立所述保留之后,如果所述鎖可用,并由除了所述第二線程之外的線程所請求,則所述請求線程被拒絕、被添加到等待隊列、以及被置為睡眠。此外,所述保留被清除。在所述保留已被清除后,所述鎖將被授予請求所述鎖的下一線程。
文檔編號G06F9/46GK1983193SQ200610146578
公開日2007年6月20日 申請日期2006年11月15日 優(yōu)先權(quán)日2005年12月12日
發(fā)明者A·鄧希, J·M·阿卡帕蒂, M·阿卡帕蒂, D·米歇爾 申請人:國際商業(yè)機器公司