国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      實現(xiàn)自適應(yīng)鎖的方法和裝置以及多核處理器系統(tǒng)的制作方法

      文檔序號:6439957閱讀:158來源:國知局
      專利名稱:實現(xiàn)自適應(yīng)鎖的方法和裝置以及多核處理器系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明實施例涉及計算機領(lǐng)域,并且更具體地,涉及實現(xiàn)自適應(yīng)鎖的方法和裝置以及多核處理器系統(tǒng)。
      背景技術(shù)
      隨著芯片技術(shù)的不斷發(fā)展,多處理器核系統(tǒng)已經(jīng)越來越普及。為了最大限度地發(fā)揮多處理器核的潛力,應(yīng)用程序通常采用多線程的方式進行并行運行?,F(xiàn)在的大部分架構(gòu)的計算機系統(tǒng),例如SMP (SymmetricalMulti-Processing Architecture,對稱多處理架構(gòu))、NUMA (Non UniformMemory Access Architecture,非一致內(nèi)存訪問架構(gòu)),提供了統(tǒng)一的物理內(nèi)存地址空間。因此,多個應(yīng)用程序或線程可以通過共享變量來訪問(讀操作或?qū)懖僮?同一個內(nèi)存地址。但是,對同一個內(nèi)存地址的并行訪問,必然存在競爭。例如,兩個線程同時訪問一個內(nèi)存地址,有可能會引起資源沖突。為了避免這樣的沖突,處理器核提供了多種同步機制來保護共享的存儲設(shè)備和/或共享的硬件高速緩存中的共享資源,例如自旋鎖、互斥鎖等。并行多線程訪問共享資源時,必然會競爭保護該共享資源的鎖。隨著核數(shù)的增多, 并行線程的增多,鎖競爭度也變得越來越激烈,以至于會對應(yīng)用程序的性能產(chǎn)生較大的影響。因此,需要采取有效的措施降低鎖競爭、避免鎖抖動,進而提高系統(tǒng)性能。

      發(fā)明內(nèi)容
      本發(fā)明實施例提供了一種實現(xiàn)自適應(yīng)鎖的方法以及裝置以及多核處理器系統(tǒng),針對系統(tǒng)中處理器核的鎖機制,能夠一定程度上解決多線程競爭同一個鎖時產(chǎn)生的鎖抖動。一方面,提供了一種實現(xiàn)自適應(yīng)鎖的方法,包括當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖;當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。另一方面,提供了一種實現(xiàn)自適應(yīng)鎖的裝置,包括確定單元,用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);競爭單元,用于當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖;喚醒單元,用于當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。再一方面,提供了一種多核處理器系統(tǒng),包括兩個或更多個處理器核,以及共享的硬件資源;所述兩個或更多個處理器核訪問由自適應(yīng)鎖保護的所述共享的硬件資源;其中每個所述處理器核用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑, 則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢, 釋放所述自適應(yīng)鎖;當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖??梢?,本發(fā)明實施例的可擴展的自適應(yīng)鎖的實現(xiàn)技術(shù),由于能夠根據(jù)自適應(yīng)鎖的競爭程度(即競爭自適應(yīng)鎖的線程的數(shù)目多少)選擇合適的鎖模式,當競爭自適應(yīng)鎖的線程的數(shù)目超過一定數(shù)量,使超出的部分線程進入節(jié)能狀態(tài),而保證不超過一定數(shù)量的處于自旋狀態(tài)的線程在競爭自適應(yīng)鎖,只有當一個處于自旋狀態(tài)的線程在訪問自適應(yīng)鎖保護的共享資源后才相應(yīng)地使一個處于節(jié)能狀態(tài)的線程進入自旋狀態(tài),從而避免了多線程在競爭同一個鎖時產(chǎn)生的鎖抖動,進而降低了系統(tǒng)的開銷,提高了系統(tǒng)的性能。


      為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是根據(jù)本發(fā)明實施例的自適應(yīng)鎖的數(shù)據(jù)結(jié)構(gòu)的示意圖。圖2是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法的概要流程圖。圖3是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法的詳細流程圖。圖4是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法中線程進入節(jié)能狀態(tài)的流程圖。圖5是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法中自適應(yīng)鎖被釋放后的操作流程。圖6是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法中運用硬件指令monitor以及 mwait使線程退出節(jié)能狀態(tài)的流程圖。圖7是根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的裝置的結(jié)構(gòu)示意圖。圖8是根據(jù)本發(fā)明實施例的多核處理器系統(tǒng)的結(jié)構(gòu)示意圖。圖9是根據(jù)本發(fā)明實施例的多核處理器系統(tǒng)的實際部署的示意圖。
      具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。圖1中示出了根據(jù)本發(fā)明實施例的自適應(yīng)鎖的數(shù)據(jù)結(jié)構(gòu),其中包括鎖狀態(tài)標識、 請求者計數(shù)器,節(jié)能狀態(tài)請求者集合以及節(jié)能狀態(tài)請求者集合的保護鎖等信息。通常,請求者計數(shù)器是自適應(yīng)鎖數(shù)據(jù)結(jié)構(gòu)中的一個成員變量,用于表示競爭該自適應(yīng)鎖的線程數(shù)目。 一般而言,集合可以是鏈表、隊列或數(shù)組等形式。在根據(jù)本發(fā)明實施例的自適應(yīng)鎖中,集合的元素個數(shù)與系統(tǒng)中處理器核的個數(shù)相同。例如,本發(fā)明實施例的自適應(yīng)鎖的數(shù)據(jù)結(jié)構(gòu)可以緩存至硬件高速緩存,其中,每個成員變量占據(jù)一個緩存行,例如,鎖狀態(tài)標識占據(jù)第一緩存行,請求者計數(shù)器占據(jù)第二緩存行,從而避免錯誤共享。以下將結(jié)合圖2至圖6,具體描述如何根據(jù)本發(fā)明實施例實現(xiàn)自適應(yīng)鎖。如圖2所示,根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法,包括21,當新的第一線程嘗試獲得自適應(yīng)鎖時,如果自適應(yīng)鎖空閑,則使該第一線程獲得自適應(yīng)鎖,否則使該第一線程根據(jù)競爭該自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài)。其中,進入自旋狀態(tài)的線程將競爭自適應(yīng)鎖;進入節(jié)能狀態(tài)的線程將不會競爭自適應(yīng)鎖,直到該進入節(jié)能狀態(tài)的線程被喚醒而進入自旋狀態(tài),才與其他已處于自旋狀態(tài)的線程一同競爭自適應(yīng)鎖。根據(jù)競爭自適應(yīng)鎖的激烈程度使線程進入自旋狀態(tài)或者節(jié)能狀態(tài)是為了保證競爭自適應(yīng)鎖的處于自旋狀態(tài)的線程不超過預(yù)設(shè)閾值,而超過閾值數(shù)量的線程將處于節(jié)能狀態(tài),由此降低自適應(yīng)鎖的競爭程度,防止鎖抖動。具體而言,當運行在第一處理器核上的一個新的第一線程嘗試獲得自適應(yīng)鎖時, 該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目將遞增。當該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值時,該第一線程將進入自旋狀態(tài);而當該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,該第一線程將進入節(jié)能狀態(tài)。此外,該新的第一線程在進入節(jié)能狀態(tài)之前,需要經(jīng)過以下步驟。首先,該線程獲取該自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合的保護鎖。然后,該線程順序地加入到該自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合中,該節(jié)能狀態(tài)請求者集合對應(yīng)于其上運行該第一線程的處理器核。 接著,該線程被設(shè)置節(jié)能狀態(tài)標識。最后,在該節(jié)能狀態(tài)請求者集合的保護鎖被解除后,該線程進入節(jié)能狀態(tài)。以上描述了線程如何根據(jù)自適應(yīng)鎖的競爭程度(即競爭自適應(yīng)鎖的線程的數(shù)目多少)選擇合適的狀態(tài),例如自旋狀態(tài)或節(jié)能狀態(tài)。由于只有處于自旋狀態(tài)的線程競爭自適應(yīng)鎖,而處于自旋狀態(tài)的線程的數(shù)量不會超過閾值,因此競爭自適應(yīng)鎖的激烈程度被限制。22,當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖。也就是說,在多核處理器系統(tǒng)中,始終由處于自旋狀態(tài)的全部線程競爭該自適應(yīng)鎖,直到有一個處于自旋狀態(tài)的線程(例如,第一線程)獲得該自適應(yīng)鎖,此時遞減該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目,并在上述處于自旋狀態(tài)的線程(例如,第一線程)對該自適應(yīng)鎖保護的共享資源操作完畢后,該自適應(yīng)鎖將被釋放。也就是說,一旦第一線程處于節(jié)能狀態(tài),第一處理器核使所述第一線程等待被喚醒進入自旋狀態(tài),或者第一線程處于自旋狀態(tài)或者從節(jié)能狀態(tài)喚醒進入自旋狀態(tài),第一處理器核使第一線程競爭所述自適應(yīng)鎖,直到第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖。具體地,每當持有自適應(yīng)鎖的線程對該自適應(yīng)鎖保護的共享資源操作完畢后,該自適應(yīng)鎖都被釋放。如果此時不存在處于節(jié)能狀態(tài)的線程,則繼續(xù)由剩下的處于自旋狀態(tài)的線程競爭自適應(yīng)鎖,直到所有處于自旋狀態(tài)的線程都依次獲得自適應(yīng)鎖。然而,23,當該自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭該自適應(yīng)鎖。例如,在第一線程對自適應(yīng)鎖保護的共享資源操作完畢后,該自適應(yīng)鎖被釋放,第一處理器核首先判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,則說明有處于節(jié)能狀態(tài)的線程。然后,依據(jù)競爭該自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇一個合適的非空的節(jié)能狀態(tài)請求者集合。例如,當競爭該自適應(yīng)鎖的線程是無序地競爭該自適應(yīng)鎖時,則首先從與第一處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合中選擇首個線程,其中該第一處理器核上運行有釋放該自適應(yīng)鎖的第一線程。而當對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合為空時,再根據(jù)其他處理器核與所述第一處理器核之間的距離,由近及遠地依次選擇一個對應(yīng)于所述其他處理器核的節(jié)能狀態(tài)請求者集合,其中所述第一處理器核上運行有釋放所述自適應(yīng)鎖的第一線程?;蛘撸敻偁幵撟赃m應(yīng)鎖的線程是有序地競爭該自適應(yīng)鎖時,則通過遍歷所有非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,該票序號是用于標記獲取該自適應(yīng)鎖的順序的標識變量。最后,喚醒該合適的非空的節(jié)能狀態(tài)請求者集合的首個線程,使其進入自旋狀態(tài)。例如,通過硬件指令監(jiān)測該合適的非空的節(jié)能狀態(tài)請求者集合的首個線程的節(jié)能狀態(tài)標識是否被清零,如果該節(jié)能狀態(tài)標識被清零,則使該合適的非空的節(jié)能狀態(tài)請求者集合的首個線程進入自旋狀態(tài)。綜上所述,當某線程嘗試獲取自適應(yīng)鎖時,如果該自適應(yīng)鎖空閑,則處理器核使線程獲取自適應(yīng)鎖。否則,遞增自適應(yīng)鎖的請求者計數(shù)器,判斷自適應(yīng)鎖的競爭是否激烈。如果請求者計數(shù)器未超過預(yù)設(shè)的閾值,處理器核使線程進入自旋狀態(tài);否則,使線程進入節(jié)能狀態(tài)。在多核處理器系統(tǒng)中,始終由處于自旋狀態(tài)的線程競爭自適應(yīng)鎖。而在自適應(yīng)鎖被釋放時,才喚醒另一個處于節(jié)能狀態(tài)的線程,使其進入自旋狀態(tài),以便競爭自適應(yīng)鎖。其中預(yù)設(shè)的閾值用于判斷該自適應(yīng)鎖被競爭的激烈程度。根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法能夠根據(jù)自適應(yīng)鎖的競爭程度選擇合適的鎖模式,限制競爭自適應(yīng)鎖的線程的數(shù)目, 從而避免了多線程在競爭同一個鎖時產(chǎn)生的鎖抖動,進而降低了系統(tǒng)的開銷,提高了系統(tǒng)的性能。圖3至圖6具體地示出了根據(jù)本發(fā)明實施例的自適應(yīng)鎖的實現(xiàn)過程。下面以某線程(假設(shè)為線程A)嘗試獲取自適應(yīng)鎖為例,詳細描述如何利用自適應(yīng)鎖對線程競爭進行控制。具體地,301,當線程A嘗試獲取自適應(yīng)鎖時,首先在302中判斷自適應(yīng)鎖是否空閑。如果自適應(yīng)鎖空閑,則在303中線程A獲取該自適應(yīng)鎖,并訪問該自適應(yīng)鎖保護的資源;否則轉(zhuǎn)至304。在304中,遞增自適應(yīng)鎖的請求者計數(shù)器。305,判斷請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目是否大于閾值。一般而言,該閾值與系統(tǒng)的業(yè)務(wù)及其擴展性有關(guān)。如果競爭該自適應(yīng)鎖的線程數(shù)目小于等于閾值時,表明系統(tǒng)中的鎖競爭不激烈, 不會造成鎖抖動。那么,306,線程A進入自旋狀態(tài),即一直嘗試獲取自適應(yīng)鎖。否則,當競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,則表明系統(tǒng)中的自適應(yīng)鎖的競爭很激烈,容易造成鎖抖動。那么,需要在307中使線程A進入節(jié)能狀態(tài)。當自適應(yīng)鎖被釋放時,則在308中喚醒處于節(jié)能狀態(tài)的一個線程,使其進入自旋狀態(tài),以便競爭自適應(yīng)鎖。喚醒線程的步驟將在下面詳細描述。參照圖4說明根據(jù)本發(fā)明實施例的自適應(yīng)鎖中線程如何進入節(jié)能狀態(tài),即線程在進入節(jié)能狀態(tài)前的處理過程。401,線程A獲取其上運行該線程A的處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合保護鎖。其中涉及的節(jié)能狀態(tài)請求者集合是自適應(yīng)鎖數(shù)據(jù)結(jié)構(gòu)中的一個成員變量,自適應(yīng)鎖數(shù)據(jù)結(jié)構(gòu)中包含一個節(jié)能狀態(tài)請求者集合,該節(jié)能狀態(tài)請求者集合中的元素個數(shù)與系統(tǒng)中處理器核core的數(shù)目相同,以保證一個處理器核對應(yīng)一個節(jié)能狀態(tài)請求者集合。由于線程運行在處理器核上,當線程需要對自適應(yīng)鎖保護的資源進行操作時,會嘗試獲取自適應(yīng)鎖。如果自適應(yīng)鎖被其他線程所持有,則線程根據(jù)圖3中的判斷條件將處于自旋狀態(tài)或者加入到與其上運行該線程的處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合中。在一種實現(xiàn)方式下,該節(jié)能狀態(tài)請求者集合為節(jié)能狀態(tài)請求者隊列數(shù)組,其中,節(jié)能狀態(tài)請求者隊列數(shù)組的元素是隊列,數(shù)組中元素即隊列的個數(shù)與系統(tǒng)中處理器核的數(shù)目相同。402,線程A順序地加入到對應(yīng)的節(jié)能狀態(tài)請求者集合中,即將線程A的數(shù)據(jù)結(jié)構(gòu)指針作為一個元素添加到集合中,在喚醒處于節(jié)能狀態(tài)的線程的過程中也可以通過該元素 (即線程A的數(shù)據(jù)結(jié)構(gòu)指針)尋找到線程A。通常,在此時設(shè)置內(nèi)存屏障(memory barrier),防止系統(tǒng)自動對內(nèi)存中的代碼進行編譯優(yōu)化,避免了指令重新排序,從而確保線程的執(zhí)行順序。403,為線程A設(shè)置節(jié)能狀態(tài)標識,這里的節(jié)能狀態(tài)標識是線程描述符中一個成員變量,用于表示線程是否處于節(jié)能狀態(tài)。404,解鎖,即解除當前處理器核對應(yīng)的節(jié)能狀態(tài)請求者保護鎖的保護。此時,線程A進入節(jié)能狀態(tài)。下面將結(jié)合圖5描述當自適應(yīng)鎖釋放后處于節(jié)能狀態(tài)的線程如何進入自旋狀態(tài)以競爭獲得自適應(yīng)鎖的過程。當自適應(yīng)鎖被釋放時,501,首先判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果不存在這樣的集合,則轉(zhuǎn)至504,判斷是否有處于自旋狀態(tài)的線程競爭自適應(yīng)鎖。否則,轉(zhuǎn)至 502。通常,此時也設(shè)置內(nèi)存屏障,以防止系統(tǒng)自動對代碼進行編譯優(yōu)化,避免了指令重新排序。502,選擇合適的非空的節(jié)能狀態(tài)請求者集合。例如,依據(jù)競爭自適應(yīng)鎖的線程的有序或者無序狀態(tài)選擇合適的非空的節(jié)能狀態(tài)請求者集合。具體而言,如果競爭該自適應(yīng)鎖的線程是無序地競爭該自適應(yīng)鎖,則按照如下方式選擇合適的非空的節(jié)能狀態(tài)請求者集合當持有自適應(yīng)鎖的第一線程釋放該自適應(yīng)鎖時,首先從與釋放自適應(yīng)鎖的其上運行第一線程的處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合中選擇首個線程,例如第二線程;如果與其上運行該第一線程的處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合為空,則從與其上運行該第一線程的處理器核鄰近的處理器核對應(yīng)的節(jié)能狀態(tài)請求者集合中喚醒首個線程,例如第三線程。即按照與當前線程運行的處理器核的遠近距離選擇對應(yīng)隊列,例如從近及遠。如果競爭該自適應(yīng)鎖的線程是有序地競爭該自適應(yīng)鎖,則按照如下方式選擇合適的非空的節(jié)能狀態(tài)請求者集合當持有自適應(yīng)鎖的第一線程釋放該自適應(yīng)鎖時,遍歷各非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,其中票序號是用于標記獲取該自適應(yīng)鎖的順序的標識變量。例如,當線程嘗試獲取自適應(yīng)鎖時,會遞增自適應(yīng)鎖的鎖競爭者數(shù)變量,并將該變量的值作為該線程的對應(yīng)該自適應(yīng)鎖的票序號, 其中每當發(fā)生新增線程競爭該自適應(yīng)鎖,那么采用對應(yīng)的鎖競爭者數(shù)變量。503,于是,將該非空的節(jié)能狀態(tài)請求者集合中的首個線程的節(jié)能狀態(tài)標識清零, 即喚醒該首個線程,使得該首個線程從節(jié)能狀態(tài)退出,進入自旋狀態(tài)。504,判斷是否有處于自旋狀態(tài)的線程在競爭該自適應(yīng)鎖,如果沒有,則該線程獲得自適應(yīng)鎖的過程結(jié)束。如果存在競爭自適應(yīng)鎖的處于自旋狀態(tài)的線程,則在505中遞減自適應(yīng)鎖的請求者計數(shù)器,于是在506中由競爭到自適應(yīng)鎖的處于自旋狀態(tài)的線程獲取該自適應(yīng)鎖,并訪問自適應(yīng)鎖保護的資源。最后,該線程獲得自適應(yīng)鎖的過程結(jié)束。在處于節(jié)能狀態(tài)的線程組成的某個集合而言,可以通過硬件指令實現(xiàn)從節(jié)能狀態(tài)到自旋狀態(tài)的喚醒過程。例如,可以利用事件監(jiān)測設(shè)置指令設(shè)置硬件要監(jiān)測的線性地址,然后將處理器核置為監(jiān)測事件等待狀態(tài);并結(jié)合等待指令監(jiān)測硬件的狀態(tài),以達到節(jié)能的目的。在本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法中,使用了常用的硬件指令monitor與 mwait的特性。例如,monitor指令的作用是設(shè)置硬件要監(jiān)視的線性地址范圍,并激活監(jiān)視器,當監(jiān)視事件處于掛起狀態(tài)時,硬件檢測指定地址范圍的存儲操作,并使得處理器拖出監(jiān)控事件掛起狀態(tài);mwait指令是使用監(jiān)視器硬件的狀態(tài),以達到節(jié)能的目的。應(yīng)理解,本發(fā)明實施例并不局限于monitor和mwait的硬件指令,也包括其他硬件架構(gòu)上具有相同作用的硬件指令。例如,在圖6中給出了硬件指令monitor作為事件監(jiān)測設(shè)置指令以及mwait作為等待指令的例子。通過運用硬件指令monitor與mwait,可以實時監(jiān)測線程的節(jié)能狀態(tài)標識,如果該標識被清零,則該線程就推出節(jié)能狀態(tài)而進入自旋狀態(tài),從而競爭自適應(yīng)鎖;否則,該線程一直保持在節(jié)能狀態(tài)。具體過程參見圖6。601,判斷線程的節(jié)能狀態(tài)標識是否清零,如果沒有,則轉(zhuǎn)至步驟602 ;如果清零, 則轉(zhuǎn)至步驟605。602,設(shè)置硬件指令monitor用于監(jiān)測線程的節(jié)能狀態(tài)標識,轉(zhuǎn)至步驟603。603,判斷線程的節(jié)能狀態(tài)標識是否清零,如果沒有,轉(zhuǎn)至步驟604;否則轉(zhuǎn)至步驟 605。
      604,利用硬件指令mwait使線程保持在節(jié)能狀態(tài),從而降低處理器核的頻率,降低處理器核的能耗。605,線程退出節(jié)能狀態(tài),進入自旋狀態(tài)。由此可見,根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法能夠根據(jù)自適應(yīng)鎖的競爭程度選擇合適的鎖模式,限制競爭自適應(yīng)鎖的線程的數(shù)目,從而避免了多線程在競爭同一個鎖時產(chǎn)生的鎖抖動,進而降低了系統(tǒng)的開銷,提高了系統(tǒng)的性能。下面將結(jié)合圖7具體描述根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的裝置的結(jié)構(gòu)。在圖 7中,實現(xiàn)自適應(yīng)鎖的裝置70包括確定單元71、競爭單元72和喚醒單元73。其中,確定單元 71用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài)。競爭單元72用于當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖, 直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖。喚醒單元73用于當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程, 則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。本領(lǐng)域技術(shù)人員可以理解,本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的裝置,在一種實現(xiàn)方式下,其物理形態(tài)可以是處理器核,處理器核可以是中央處理器(CPU,Central Processing Unit),或者微處理器(MPU,Micro Processor Unit)、或者數(shù)字信號處理器(DSP, Digital Signal !Processing)、或者圖形處理器(GPU,圖形處理器)。進一步地,確定單元71具體用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則遞增該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目;當該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值,使該第一線程進入自旋狀態(tài);當該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,使該第一線程進入節(jié)能狀態(tài)??蛇x地,確定單元71具體用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則遞增所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目;當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值,使所述第一線程進入自旋狀態(tài);當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,使該第一線程獲取該自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合的保護鎖;使該第一線程順序地加入到該自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合中,其中該節(jié)能狀態(tài)請求者集合對應(yīng)于其上運行該第一線程的處理器核;使該線程被設(shè)置節(jié)能狀態(tài)標識;在該節(jié)能狀態(tài)請求者集合的保護鎖被解除后,使該線程進入節(jié)能狀態(tài)。或者,競爭單元72具體用于當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使處于自旋狀態(tài)的第一線程競爭該自適應(yīng)鎖,直到該第一線程獲得該自適應(yīng)鎖,遞減該自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目,在該第一線程對該自適應(yīng)鎖保護的存儲資源操作完畢后, 釋放該自適應(yīng)鎖。
      或者,喚醒單元73具體用于當該自適應(yīng)鎖被釋放時,判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,則依據(jù)競爭該自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇一個非空的節(jié)能狀態(tài)請求者集合;喚醒該非空的節(jié)能狀態(tài)請求者集合的首個線程, 使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。進一步地,喚醒單元73具體用于當自適應(yīng)鎖被釋放時,判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,且當競爭該自適應(yīng)鎖的線程是無序地競爭該自適應(yīng)鎖時,則選擇對應(yīng)于第一處理器核(這里的“第一”沒有限制之意,僅是為了方便描述而已)的節(jié)能狀態(tài)請求者集合,而當對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合為空時,再根據(jù)其他處理器核與該第一處理器核之間的距離,由近及遠地依次選擇對應(yīng)于第二處理器核的節(jié)能狀態(tài)請求者集合,其中該第一處理器核上運行有釋放該自適應(yīng)鎖的第一線程,第二處理器核為其他處理器核中與該第一處理器核的距離最近的處理器核;或者,且當競爭該自適應(yīng)鎖的線程是有序地競爭該自適應(yīng)鎖時,則通過遍歷所有非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,該票序號是用于標記獲取該自適應(yīng)鎖的順序的標識變量。進一步地,喚醒單元73還用于通過硬件指令監(jiān)測該非空的節(jié)能狀態(tài)請求者集合的首個線程的節(jié)能狀態(tài)標識是否被清零,如果該節(jié)能狀態(tài)標識被清零,使該首個線程進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。由此可見,根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的裝置能夠根據(jù)自適應(yīng)鎖的競爭程度選擇合適的鎖模式,限制競爭自適應(yīng)鎖的線程的數(shù)目,從而避免了多線程在競爭同一個鎖時產(chǎn)生的鎖抖動,進而降低了系統(tǒng)的開銷,提高了系統(tǒng)的性能。綜上所述,在多核平臺上,鎖競爭嚴重影響了系統(tǒng)的擴展性,使得隨著核數(shù)的增加,使得系統(tǒng)的性能降低,產(chǎn)生鎖震蕩。針對這種情況,本發(fā)明實施例基于硬件指令的節(jié)能狀態(tài)和自旋狀態(tài)的動態(tài)選擇技術(shù),提出一種可擴展的自適應(yīng)鎖的實現(xiàn)技術(shù)。該技術(shù)能夠根據(jù)自適應(yīng)鎖競爭程度,即競爭自適應(yīng)鎖的線程的數(shù)目多少,選擇合適等鎖模式,避免了線程上下文切換,降低了緩存失效次數(shù),降低鎖競爭,避免鎖抖動,從而降低系統(tǒng)開銷,提高系統(tǒng)性能。圖8是根據(jù)本發(fā)明實施例的多核處理器系統(tǒng)的結(jié)構(gòu)示意圖。本發(fā)明實施例的多核處理器系統(tǒng)可以包括兩個或更多個處理器核,以及共享的硬件資源。在圖8中僅示意性地示出了 2個處理器核,即第一處理器核801和第二處理器核802,以及共享的硬件資源803。 其中第一處理器核801和第二處理器核802訪問由自適應(yīng)鎖保護的所述共享的硬件資源 803。應(yīng)理解,在本發(fā)明實施例的多核處理器系統(tǒng)中可以包括更多個處理器核。其中,各個處理器核具有平等地位,從而每個處理器核都實現(xiàn)根據(jù)本發(fā)明實施例的實現(xiàn)自適應(yīng)鎖的方法。具體而言,每個處理器核用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果該自適應(yīng)鎖空閑,則使該第一線程獲得自適應(yīng)鎖,否則使第一線程根據(jù)競爭自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當?shù)谝痪€程處于節(jié)能狀態(tài),使第一線程等待被喚醒進入自旋狀態(tài), 或者當?shù)谝痪€程處于自旋狀態(tài),使第一線程競爭自適應(yīng)鎖,直到第一線程競爭到自適應(yīng)鎖并對自適應(yīng)鎖保護的共享資源操作完畢,釋放自適應(yīng)鎖;當自適應(yīng)鎖被釋放時,如果系統(tǒng)中有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      通常,當?shù)谝痪€程對自適應(yīng)鎖保護的共享資源操作完畢而自適應(yīng)鎖被釋放時,如果系統(tǒng)中還有處于節(jié)能狀態(tài)的線程,則第一處理器核喚醒一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài)。具體而言,當自適應(yīng)鎖被釋放時,第一處理器核判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,則第一處理器核依據(jù)競爭所述自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇一個非空的節(jié)能狀態(tài)請求者集合。例如,當競爭自適應(yīng)鎖的線程是無序地競爭所述自適應(yīng)鎖時,則第一處理器核選擇對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合,否則根據(jù)其他處理器核與所述處理器核之間的距離,由近及遠地依次選擇一個對應(yīng)于所述其他處理器核(例如,第二處理器核)的節(jié)能狀態(tài)請求者集合,其中第一處理器核上運行有釋放所述自適應(yīng)鎖的第一線程。當競爭所述自適應(yīng)鎖的線程是有序地競爭自適應(yīng)鎖時,則第一處理器核通過遍歷所有非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,所述票序號是用于標記獲取所述自適應(yīng)鎖的順序的標識變量。 最后,第一處理器核喚醒所述非空的節(jié)能狀態(tài)請求者集合的首個線程,使其進入自旋狀態(tài)。在本發(fā)明實施例中,共享的硬件資源803包括共享的存儲設(shè)備和/或共享的硬件高速緩存。需要說明的是,在本發(fā)明實施例中,以上多核處理器系統(tǒng)包括第一處理器核和第二處理器核來便于說明。應(yīng)當理解的是,本發(fā)明實施例的多核處理器系統(tǒng)是以第一處理器核和第二處理器核作為代表來說明,本發(fā)明實施例的多核處理器系統(tǒng)可以包括多個處理器核,這里的多個處理器核,可以是屬于同一個處理器,也可以是分別屬于不同的處理器。如圖9所示的本發(fā)明實施例的多核處理器系統(tǒng)的實際物理部署示意圖??梢岳斫鉃椋嗪颂幚砥飨到y(tǒng)包括一個處理器,且該處理器中包括第一處理器核和第二處理器核,或者,以多核處理器系統(tǒng)包括兩個處理器,其中一個處理器包括第一處理器核,另一個處理器包括第二處理器核。需要說明的是,在本發(fā)明實施例中,當?shù)谝惶幚砥骱撕偷诙幚砥骱朔謩e屬于不同的處理器時,該第一處理器核和第二處理器核可以訪問由自適應(yīng)鎖保護的共享的存儲設(shè)備;當?shù)谝惶幚砥骱撕偷诙幚砥骱藢儆谕粋€處理器時,該第一處理器核和第二處理器可以訪問由自適應(yīng)鎖保護的共享的存儲設(shè)備和/或由自適應(yīng)鎖保護的共享的高速緩沖存儲器。如圖9所示,在一種實現(xiàn)方法下,處理器中的共享的高速緩沖存儲器可以由一個自適應(yīng)鎖(為了方便描述,這里可以稱為第一自適應(yīng)鎖)保護,以便該處理器中的多個處理器核訪問由第一自適應(yīng)鎖保護的共享的高速緩沖存儲器,以及,互聯(lián)網(wǎng)絡(luò)上的共享存儲設(shè)備也可以由另一個自適應(yīng)性鎖保護(為了方便描述,這里可以稱為第二自適應(yīng)鎖),以便多核處理器系統(tǒng)中的多個處理器核能訪問由第二自適應(yīng)鎖保護的所述共享存儲設(shè)備。在實際應(yīng)用中,多核處理器系統(tǒng)可以包括一個或多個處理器,如果包括僅一個處理器,則該處理器中包括多個處理器核。其中,每個處理器包括一個或多個處理器核??蛇x的,所述每個處理器可以進一步包括共享的硬件高速緩存,所述處理器通過互聯(lián)網(wǎng)絡(luò)訪問存儲設(shè)備,這里的存儲設(shè)備可以是共享給多個處理器核的,這里的存儲設(shè)備可以是一個或多個。需要說明的是,在本發(fā)明實施例中,處理器之間通過互聯(lián)網(wǎng)絡(luò)訪問共享的存儲設(shè)備, 該互聯(lián)網(wǎng)絡(luò)可以是總線或者是互聯(lián)芯片,且該共享的存儲設(shè)備可以是內(nèi)存,如memory,或者是外存,如磁盤。在本發(fā)明實施例中,多核處理器系統(tǒng)中包含的共享的硬件資源可以是共享的存儲設(shè)備,或者共享的硬件高速緩存,或者是共享的存儲設(shè)備和共享的硬件高速緩存,其中,共享的存儲設(shè)備在處理器外部,通過總線與處理器核連接,共享的硬件高速緩存在處理器內(nèi)部。應(yīng)當理解的是,在一種實現(xiàn)方式下,本發(fā)明實施例的處理器核可以包括實現(xiàn)自適應(yīng)鎖的邏輯單元,這里的實現(xiàn)自適應(yīng)鎖的邏輯單元可以是軟件實現(xiàn)的,也可以是硬件實現(xiàn)的,也可以是軟硬結(jié)合實現(xiàn)的。如果實現(xiàn)自適應(yīng)鎖的邏輯單元是軟件實現(xiàn)的話,可以理解成,當通用的處理器核通過互聯(lián)網(wǎng)絡(luò)訪問內(nèi)存,在加載并執(zhí)行該內(nèi)存中存儲的一段調(diào)度程序代碼后,則具有本發(fā)明實施例的處理器核的功能。應(yīng)當理解的是,本發(fā)明實施例的處理器核上運行有操作系統(tǒng),該操作系統(tǒng)具體可以是Linux系統(tǒng),或者Unix系統(tǒng),也可以是 Windows等具有機器硬件和軟件資源管理控制系統(tǒng)。需要說明的是,在本發(fā)明實施例中,圖7所示的實現(xiàn)自適應(yīng)鎖的裝置,在一種實現(xiàn)方式下,其物理形態(tài)可以是處理器核,可以通過在處理器核中包含實現(xiàn)自適應(yīng)鎖的邏輯單元(圖9中用方框示意)實現(xiàn),且所述實現(xiàn)自適應(yīng)鎖的邏輯單元可以是軟件實現(xiàn)的,也可以是硬件實現(xiàn)的,也可以是軟硬結(jié)合實現(xiàn)的?;蛘?,在另一種實現(xiàn)方式下,圖7所示的實現(xiàn)自適應(yīng)鎖的裝置對應(yīng)于處理器核中的實現(xiàn)自適應(yīng)鎖的邏輯單元(圖9中用方框示意)。本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、 裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。 而前述的存儲介質(zhì)包括U盤、移動硬盤、只讀存儲器(ROM,Read-only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
      以上所述,僅為本發(fā)明的具體實施方式
      ,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準。
      權(quán)利要求
      1.一種實現(xiàn)自適應(yīng)鎖的方法,其特征在于,包括當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖;當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài)包括遞增所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目;當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值,使所述第一線程進入自旋狀態(tài);當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,使所述第一線程進入節(jié)能狀態(tài)。
      3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述使所述第一線程進入節(jié)能狀態(tài)包括使所述第一線程獲取所述自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合的保護鎖;使所述第一線程順序地加入到所述自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合中,其中所述節(jié)能狀態(tài)請求者集合對應(yīng)于其上運行所述第一線程的處理器核;使所述線程被設(shè)置節(jié)能狀態(tài)標識;在所述節(jié)能狀態(tài)請求者集合的保護鎖被解除后,使所述線程進入節(jié)能狀態(tài)。
      4.根據(jù)權(quán)利要求1至3中任一項所述的方法,其特征在于,所述使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖包括使處于自旋狀態(tài)的所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程獲得所述自適應(yīng)鎖,遞減所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭所述自適應(yīng)鎖的線程數(shù)目,在所述第一線程對所述自適應(yīng)鎖保護的共享資源操作完畢后,釋放所述自適應(yīng)鎖。
      5.根據(jù)權(quán)利要求1至4中任一項所述的方法,其特征在于,所述當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài)包括當所述自適應(yīng)鎖被釋放時,判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,則依據(jù)競爭所述自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇一個非空的節(jié)能狀態(tài)請求者集合;喚醒所述非空的節(jié)能狀態(tài)請求者集合的首個線程,使其進入自旋狀態(tài)。
      6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述依據(jù)競爭所述自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇非空的節(jié)能狀態(tài)請求者集合包括當競爭所述自適應(yīng)鎖的線程是無序地競爭所述自適應(yīng)鎖時,則選擇對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合,而當對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合為空時,再根據(jù)其他處理器核與所述第一處理器核之間的距離,由近及遠地依次選擇對應(yīng)于第二處理器核的節(jié)能狀態(tài)請求者集合,其中所述第一處理器核上運行有釋放所述自適應(yīng)鎖的第一線程,第二處理器核為所述其他處理器核中與所述第一處理器核的距離最近的處理器核;當競爭所述自適應(yīng)鎖的線程是有序地競爭所述自適應(yīng)鎖時,則通過遍歷所有非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,所述票序號是用于標記獲取所述自適應(yīng)鎖的順序的標識變量。
      7.根據(jù)權(quán)利要求5或6所述的方法,其特征在于,所述喚醒所述非空的節(jié)能狀態(tài)請求者集合的首個線程,使其進入自旋狀態(tài)包括通過硬件指令監(jiān)測所述非空的節(jié)能狀態(tài)請求者集合的首個線程的節(jié)能狀態(tài)標識是否被清零,如果所述節(jié)能狀態(tài)標識被清零,使所述首個線程進入自旋狀態(tài)。
      8.一種實現(xiàn)自適應(yīng)鎖的裝置,其特征在于,包括確定單元,用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);競爭單元,用于當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享資源操作完畢,釋放所述自適應(yīng)鎖;喚醒單元,用于當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述確定單元具體用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則遞增所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目;當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值,使所述第一線程進入自旋狀態(tài);當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,使所述第一線程進入節(jié)能狀態(tài)。
      10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述確定單元具體用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則遞增所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目;當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目小于或等于閾值,使所述第一線程進入自旋狀態(tài);當所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭該自適應(yīng)鎖的線程數(shù)目大于閾值,使所述第一線程獲取所述自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合的保護鎖;使所述第一線程順序地加入到所述自適應(yīng)鎖的節(jié)能狀態(tài)請求者集合中,其中所述節(jié)能狀態(tài)請求者集合對應(yīng)于其上運行所述第一線程的處理器核;使所述線程被設(shè)置節(jié)能狀態(tài)標識;在所述節(jié)能狀態(tài)請求者集合的保護鎖被解除后,使所述線程進入節(jié)能狀態(tài)。
      11.根據(jù)權(quán)利要求8至10中任一項所述的裝置,其特征在于,所述競爭單元具體用于當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使處于自旋狀態(tài)的所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程獲得所述自適應(yīng)鎖,遞減所述自適應(yīng)鎖的請求者計數(shù)器中記錄的競爭所述自適應(yīng)鎖的線程數(shù)目,在所述第一線程對所述自適應(yīng)鎖保護的共享資源操作完畢后,釋放所述自適應(yīng)鎖。
      12.根據(jù)權(quán)利要求8至11中任一項所述的裝置,其特征在于,所述喚醒單元具體用于 當所述自適應(yīng)鎖被釋放時,判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,則依據(jù)競爭所述自適應(yīng)鎖的線程的有序競爭狀態(tài)或者無序競爭狀態(tài)選擇一個非空的節(jié)能狀態(tài)請求者集合;喚醒所述非空的節(jié)能狀態(tài)請求者集合的首個線程,使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述喚醒單元具體用于當所述自適應(yīng)鎖被釋放時,判斷是否存在非空的節(jié)能狀態(tài)請求者集合,如果存在,且競爭所述自適應(yīng)鎖的線程是無序地競爭所述自適應(yīng)鎖時,則選擇對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合,而當對應(yīng)于第一處理器核的節(jié)能狀態(tài)請求者集合為空時,再根據(jù)其他處理器核與所述第一處理器核之間的距離,由近及遠地依次選擇對應(yīng)于第二處理器核的節(jié)能狀態(tài)請求者集合,其中所述第一處理器核上運行有釋放所述自適應(yīng)鎖的第一線程,第二處理器核為所述其他處理器核中與所述第一處理器核的距離最近的處理器核;或者,且當競爭所述自適應(yīng)鎖的線程是有序地競爭所述自適應(yīng)鎖時,則通過遍歷所有非空的節(jié)能狀態(tài)請求者集合,尋找票序號最小的線程所在的節(jié)能狀態(tài)請求者集合,所述票序號是用于標記獲取所述自適應(yīng)鎖的順序的標識變量;通過硬件指令監(jiān)測所述非空的節(jié)能狀態(tài)請求者集合的首個線程的節(jié)能狀態(tài)標識是否被清零,如果所述節(jié)能狀態(tài)標識被清零,使所述首個線程進入自旋狀態(tài)以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      14.一種多核處理器系統(tǒng),其特征在于,包括兩個或更多個處理器核,以及共享的硬件資源;所述兩個或更多個處理器核訪問由自適應(yīng)鎖保護的所述共享的硬件資源;其中每個所述處理器核用于當新的第一線程嘗試獲得自適應(yīng)鎖時,如果所述自適應(yīng)鎖空閑,則使所述第一線程獲得所述自適應(yīng)鎖,否則使所述第一線程根據(jù)競爭所述自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當所述第一線程處于節(jié)能狀態(tài),使所述第一線程等待被喚醒進入自旋狀態(tài),或者當所述第一線程處于自旋狀態(tài),使所述第一線程競爭所述自適應(yīng)鎖,直到所述第一線程競爭到所述自適應(yīng)鎖并對所述自適應(yīng)鎖保護的共享的硬件資源操作完畢,釋放所述自適應(yīng)鎖;當所述自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭所述自適應(yīng)鎖。
      15.根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,所述共享的硬件資源包括共享的存儲設(shè)備和/或共享的硬件高速緩存;當所述兩個或更多個處理器核分別屬于不同的處理器時,所述兩個或更多個處理器核訪問由所述自適應(yīng)鎖保護的所述共享的存儲設(shè)備; 或者,當所述兩個或更多個處理器核屬于同一個處理器時,所述兩個或更多個處理器核訪問由所述自適應(yīng)鎖保護的所述共享的存儲設(shè)備和/或由所述自適應(yīng)鎖保護的共享的硬件高速緩存。
      全文摘要
      本發(fā)明提供了一種實現(xiàn)自適應(yīng)鎖的方法和裝置以及多核處理器系統(tǒng)。其中,實現(xiàn)自適應(yīng)鎖的方法,包括當新的第一線程嘗試獲得自適應(yīng)鎖時,如果自適應(yīng)鎖空閑,則使第一線程獲得自適應(yīng)鎖,否則使第一線程根據(jù)競爭自適應(yīng)鎖的激烈程度進入自旋狀態(tài)或者節(jié)能狀態(tài);當?shù)谝痪€程處于節(jié)能狀態(tài),使第一線程等待被喚醒進入自旋狀態(tài),或者當?shù)谝痪€程處于自旋狀態(tài),使第一線程競爭自適應(yīng)鎖,直到第一線程競爭到自適應(yīng)鎖并對自適應(yīng)鎖保護的共享資源操作完畢,釋放自適應(yīng)鎖;當自適應(yīng)鎖被釋放時,如果有處于節(jié)能狀態(tài)的線程,則喚醒另一個處于節(jié)能狀態(tài)的線程以使其進入自旋狀態(tài),以便與其他處于自旋狀態(tài)的線程一同競爭自適應(yīng)鎖。
      文檔編號G06F9/38GK102566979SQ201110394780
      公開日2012年7月11日 申請日期2011年12月2日 優(yōu)先權(quán)日2011年12月2日
      發(fā)明者吳瑾, 崔巖, 秦嶺, 陳渝 申請人:華為技術(shù)有限公司, 清華大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1