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

一種讀寫鎖的實現(xiàn)方法及裝置與流程

文檔序號:12034260閱讀:190來源:國知局
一種讀寫鎖的實現(xiàn)方法及裝置與流程
本發(fā)明涉及通信
技術(shù)領(lǐng)域
,尤其涉及一種讀寫鎖的實現(xiàn)方法及裝置。
背景技術(shù)
:讀寫鎖是實現(xiàn)數(shù)據(jù)互斥的一種基本機制,目前可以配置讀寫鎖是讀優(yōu)先或?qū)憙?yōu)先兩種模式,若配置讀寫鎖是讀優(yōu)先,如果有寫鎖申請在等待鎖,則不會阻塞讀鎖申請。若配置讀寫鎖是寫優(yōu)先,如果有寫鎖申請在等待鎖,則后續(xù)所有的讀鎖申請都會阻塞。針對于多核系統(tǒng),一種分布式讀寫鎖的實現(xiàn)過程為:為多核系統(tǒng)中的每個核分別配置一個讀寫鎖,作為讀者的每個核只讀本核的讀寫鎖,作為寫者的核按照一定的順序(例如,核編號從小到大)獲取其余各個核的讀寫鎖。采用這種分布式讀寫鎖,作為讀者的各個核之間完全做到了并發(fā),然而,由于作為寫者的核需要按照指定順序獲取其余各個核的讀寫鎖,從而使得作為寫者的核在遍歷其余各個核的讀寫鎖時,存在先后順序,進而導(dǎo)致作為寫者的核后遍歷到的讀寫鎖與先遍歷到的讀寫鎖相比,讀者存在更多的機會讀,從而產(chǎn)生了不公平性。技術(shù)實現(xiàn)要素:本發(fā)明實施例提供一種讀寫鎖的實現(xiàn)方法及裝置,用以解決現(xiàn)有技術(shù)中采用分布式方式可能導(dǎo)致不公平性的技術(shù)問題。本發(fā)明實施例提供一種讀寫鎖的實現(xiàn)方法,應(yīng)用于多核系統(tǒng)中,所述多核系統(tǒng)包括至少一套讀寫鎖;一套所述讀寫鎖包括一個寫公共鎖和與所述寫公共鎖對應(yīng)的n個讀私有鎖,針對于所述至少一套讀寫鎖中的一套讀寫鎖,該方法 包括:確定所述寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請;若所述寫等待隊列中存在寫鎖申請,則將所述寫公共鎖設(shè)置為加鎖狀態(tài),并在確定所述n個讀私有鎖均處于放鎖狀態(tài)后,將所述寫公共鎖分配給所述寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若所述寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài);所述m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請;m、n為正整數(shù),且m≤n。如此,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。較佳地,確定所述n個讀私有鎖均處于放鎖狀態(tài),包括:將所述n個讀私有鎖的狀態(tài)值均設(shè)置為1;遍歷所述n個讀私有鎖,若所述n個讀私有鎖中第i個讀私有鎖處于放鎖狀態(tài),則將所述第i個讀私有鎖的狀態(tài)值更新為0,其中,i為整數(shù),且1≤i≤n;當(dāng)所述n個讀私有鎖的狀態(tài)值均為0,確定所述n個讀私有鎖均處于放鎖狀態(tài)。如此,本發(fā)明實施例在確定n個讀私有鎖是否均處于放鎖狀態(tài)時,采用將n個讀私有鎖的狀態(tài)值均設(shè)置為1,進而對各個讀私有鎖進行遍歷,直到n個讀私有鎖的狀態(tài)值均為0的方式來實現(xiàn),即通過狀態(tài)值來判斷放鎖狀態(tài),使得放鎖狀態(tài)的確定更為快速準確。較佳地,遍歷所述n個讀私有鎖,包括:異步循環(huán)遍歷所述n個讀私有鎖;所述異步循環(huán)遍歷是指每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖。如此,通過異步循環(huán)遍歷的方式來對n個讀私有鎖進行遍歷,由于每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖,從而能夠減少遍歷的讀私有鎖的個數(shù),有效提高遍歷的效率,減少處理負擔(dān)。較佳地,將所述寫公共鎖分配給所述寫等待隊列中的寫優(yōu)先級最高的寫鎖申請之后,還包括:確定所述寫優(yōu)先級最高的寫鎖申請?zhí)幚硗戤吅?,將所述寫公共鎖設(shè)置為放鎖狀態(tài)。如此,當(dāng)獲得寫公共鎖的寫鎖申請?zhí)幚硗戤吅?,將寫公共鎖設(shè)置為放鎖狀態(tài),從而能夠?qū)崿F(xiàn)對后續(xù)的讀鎖申請和寫鎖申請進行處理。較佳地,所述多核系統(tǒng)中至少包括n個核;所述n個讀私有鎖分別與所述n個核一一綁定;從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài),包括:從所述n個核中為所述m個讀鎖申請中的每個讀鎖申請分配一個核;將與已分配給所述m個讀鎖申請的m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。如此,由于n個讀私有鎖分別與n個核一一綁定,為m個讀鎖申請分配m個核后,m個核可分別獲取到綁定的讀私有鎖,從而使得m個核之間實現(xiàn)并發(fā)處理。較佳地,所述多核系統(tǒng)中包括w套讀寫鎖;第k個核與所述w套讀寫鎖中對應(yīng)不同寫公共鎖的m個讀私有鎖綁定;k、w為正整數(shù),1≤k≤n。較佳地,與一個所述核綁定的w個讀私有鎖存儲在一個高速緩存行中;每個所述核綁定的第j個讀私有鎖在對應(yīng)的高速緩存行中的偏移量是一致的,j為正整數(shù),1≤j≤w。如此,一個高速緩存行中可以存儲多個讀私有鎖,減少了內(nèi)存浪費,且每個核綁定的第j個讀私有鎖在對應(yīng)的高速緩存行中的偏移量是一致的,便于對一套讀寫鎖中的各個讀私有鎖的操作。本發(fā)明實施例提供一種讀寫鎖的實現(xiàn)裝置,包括:存儲器,用于存儲至少一套讀寫鎖,一套讀寫鎖包括一個寫公共鎖和與所述寫公共鎖對應(yīng)的n個讀私有鎖;多核處理器,用于確定所述寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請,若所述寫等待隊列中存在寫鎖申請,則將所述寫公共鎖設(shè)置為加鎖狀態(tài),并在確定所述n個讀私有鎖均處于放鎖狀態(tài)后,將所述寫公共鎖分配給所述寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若所述寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài);所述m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請;m、n為正整數(shù),且m≤n。如此,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。較佳地,所述多核處理器具體用于:將所述n個讀私有鎖的狀態(tài)值均設(shè)置為1;遍歷所述n個讀私有鎖,若所述n個讀私有鎖中第i個讀私有鎖處于放鎖狀態(tài),則將所述第i讀私有鎖的狀態(tài)值更新為0,其中,i為整數(shù),且1≤i≤n;當(dāng)所述n個讀私有鎖的狀態(tài)值均為0,確定所述n個讀私有鎖均處于放鎖狀態(tài)。較佳地,所述多核處理器具體用于:異步循環(huán)遍歷所述n個讀私有鎖;所述異步循環(huán)遍歷是指每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖。較佳地,所述多核處理器還用于:確定所述寫優(yōu)先級最高的寫鎖申請?zhí)幚硗戤吅?,將所述寫公共鎖設(shè)置為放鎖狀態(tài)。較佳地,所述多核處理器中包括n個核;所述n個讀私有鎖與所述n個核一一綁定;所述多核處理器具體用于:從所述n個核中為所述m個讀鎖申請的每個讀鎖申請分配一個核;將與已分配給所述m個讀鎖申請的m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。較佳地,所述存儲器中存儲有w套讀寫鎖;第k個核與所述w套讀寫鎖中對應(yīng)不同寫公共鎖的m個讀私有鎖綁定;k、w為正整數(shù),1≤k≤n。較佳地,所述存儲器中包括n個高速緩存行;所述多核處理器還用于:將與一個所述核綁定的m個讀私有鎖存儲在一個所述高速緩存行中;每個所述核綁定的第j個讀私有鎖在對應(yīng)的緩存行中的偏移量是一致的,j為正整數(shù),1≤j≤w。本發(fā)明實施例中的讀寫鎖包括一個寫公共鎖和與寫公共鎖對應(yīng)的n個讀私有鎖;確定寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請, 若寫等待隊列中存在寫鎖申請,則將寫公共鎖設(shè)置為加鎖狀態(tài),并在確定n個讀私有鎖均處于放鎖狀態(tài)后,將寫公共鎖分配給寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從n個讀私有鎖中為m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài)其中,m個讀鎖申請為讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請。本發(fā)明實施例中,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。附圖說明為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例提供的一套讀寫鎖示意圖;圖2為本發(fā)明實施例提供的一種讀寫鎖的實現(xiàn)方法示意圖;圖3為本發(fā)明實施例中異步循環(huán)遍歷的流程示意圖;圖4為本發(fā)明實施例中m個核所綁定的讀私有鎖內(nèi)存分布示意圖;圖5為本發(fā)明實施例提供的一種讀寫鎖的實現(xiàn)裝置的結(jié)構(gòu)示意圖;圖6為本發(fā)明實施例提供的另一種讀寫鎖的實現(xiàn)裝置的結(jié)構(gòu)示意圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。讀寫鎖是多核系統(tǒng)中針對于臨界資源最常用的競爭機制,臨界資源是指一次僅允許一個寫者或讀者進行操作的資源,或者是一次僅允許一個寫者進行寫操作且允許多個讀者進行讀操作的資源,寫者和讀者是指需要對臨界資源進行指定操作的硬件或軟件。每個讀者或?qū)懻咴谠L問臨界資源前,都需要先獲得讀寫鎖,然后才可以訪問臨界資源,訪問完成后再釋放讀寫鎖,從而保證了多個讀者和寫者能夠有序地訪問臨界資源。其中,讀者和寫者分別是根據(jù)讀鎖申請和寫鎖申請執(zhí)行讀操作和寫操作,一個讀者或?qū)懻呖梢允侵敢粋€邏輯中央處理器(centralprocessingunit,縮寫cpu)或者一個核的軟件。本發(fā)明實施例正是針對多核系統(tǒng)而提出的一種讀寫鎖的實現(xiàn)方法,多核系統(tǒng)可以包括至少一套讀寫鎖。如圖1所示,為本發(fā)明實施例中的一套讀寫鎖示意圖,具體包括一個寫公共鎖和與寫公共鎖對應(yīng)的n個讀私有鎖,n為正整數(shù)。如圖1所示,第一讀私有鎖與核0綁定,第二讀私有鎖與核1綁定,……,第n讀私有鎖與核n綁定。讀鎖申請的讀者和寫鎖申請的寫者均需要先讀寫公共鎖,并根據(jù)寫公共鎖的狀態(tài)執(zhí)行相應(yīng)的操作。例如,若寫公共鎖處于加鎖狀態(tài)(即寫公共鎖已分配給寫者),則讀者需等待;若寫公共鎖處于放鎖狀態(tài),則通過異步循環(huán)判斷確定所有讀私有鎖均處于放鎖狀態(tài)后,寫者可獲取寫公共鎖?;趫D1所示的讀寫鎖,圖2示出了本發(fā)明實施例提供的一種讀寫鎖的實現(xiàn)方法示意圖,該方法步驟為針對于一套讀寫鎖的實現(xiàn)方式,具體包括:步驟201,確定所述寫公共鎖處于放鎖狀態(tài);步驟202,判斷寫等待隊列中是否存在寫鎖申請,若存在,則執(zhí)行步驟203;若不存在,則執(zhí)行步驟204;步驟203,則將所述寫公共鎖設(shè)置為加鎖狀態(tài),并在確定所述n個讀私有鎖均處于放鎖狀態(tài)后,將所述寫公共鎖分配給所述寫等待隊列中寫優(yōu)先級最高的寫鎖申請;步驟204,獲取讀等待隊列中的m個讀鎖申請,從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài);所述m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請;m、n為正整數(shù),且m≤n。本發(fā)明實施例中,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。本發(fā)明實施例中的讀寫鎖主要基于讀鎖申請比較多而寫鎖申請相對較少的場景,因此,默認寫鎖申請的優(yōu)先級高于讀鎖申請的優(yōu)先級,因此,在步驟402中,當(dāng)判斷寫等到隊列中存在寫鎖申請時,會優(yōu)先處理寫鎖申請。在步驟203中,將n個讀私有鎖的狀態(tài)值均設(shè)置為1,異步循環(huán)遍歷所述n個讀私有鎖,若第i個讀私有鎖處于放鎖狀態(tài),則將所述第i個讀私有鎖的狀態(tài)值更新為0,直至所述第一至第n讀私有鎖的狀態(tài)值均更新為0為止,確定所述n個讀私有鎖均處于放鎖狀態(tài)。其中,異步循環(huán)遍歷是指每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖。下面結(jié)合具體實例對異步循環(huán)遍歷的方法進行描述。以n等于5為例,讀鎖申請1對應(yīng)第一讀私有鎖、讀鎖申請2對應(yīng)第二讀私有鎖、讀鎖申請3對應(yīng)第三讀私有鎖、讀鎖申請4對應(yīng)第四讀私有鎖、讀鎖申請5對應(yīng)第五讀私有鎖,如圖3所示,為異步循環(huán)遍歷的流程示意圖,具體包括如下步驟:步驟301,將第一至第五讀私有鎖的狀態(tài)值均設(shè)置為1,如表1所示:表1:第一至第五讀私有鎖狀態(tài)值(初始狀態(tài))第一讀私有鎖第二讀私有鎖第三讀私有鎖第四讀私有鎖第五讀私有鎖11111步驟302,第一次遍歷,從第一讀私有鎖開始遍歷至第五讀私有鎖,判斷得知第一讀私有鎖處于放鎖狀態(tài),則將第一讀私有鎖的狀態(tài)值設(shè)置為0;繼續(xù)判斷第二讀私有鎖,得知第二讀私有鎖仍處于加鎖狀態(tài),則第二讀私有鎖的狀態(tài)值保持為1;繼續(xù)判斷第三讀私有鎖,得知第三讀私有鎖處于放鎖狀態(tài),則將第三讀私有鎖的狀態(tài)值設(shè)置為0;繼續(xù)判斷第四讀私有鎖,得知第四讀私有鎖仍處于加鎖狀態(tài),則第四讀私有鎖的狀態(tài)值保持為1;繼續(xù)判斷第五讀私有鎖,得知第五讀私有鎖仍處于加鎖狀態(tài),則第五讀私有鎖的狀態(tài)值保持為1。第一次遍歷結(jié)束后,得到第一至第五讀私有鎖的狀態(tài)值,如表2所示:表2:第一至第五讀私有鎖狀態(tài)值(第一次遍歷后)第一讀私有鎖第二讀私有鎖第三讀私有鎖第四讀私有鎖第五讀私有鎖01011步驟303,第二次遍歷,由于第一讀私有鎖已經(jīng)為0,此時遍歷的起點為第二讀私有鎖。其中,確定第二讀私有鎖為遍歷起點的方法可采用位運算函數(shù)來實現(xiàn),即從第一位開始找出第一個狀態(tài)值為1的位置,并返回第一個狀態(tài)值為1的位置的索引。從第二讀私有鎖開始遍歷至第五讀私有鎖。第二次遍歷結(jié)束后,得到第一至第五讀私有鎖的狀態(tài)值,如表3所示:表3:第一至第五讀私有鎖狀態(tài)值(第二次遍歷后)第一讀私有鎖第二讀私有鎖第三讀私有鎖第四讀私有鎖第五讀私有鎖00011步驟304,第三次遍歷,由于第一至第三讀私有鎖均已經(jīng)為0,此時遍歷 的起點為第四讀私有鎖,其中,確定第三讀私有鎖為遍歷起點的方法可采用位運算函數(shù)來實現(xiàn)。從第四私有鎖開始遍歷至第五讀私有鎖。第三次遍歷結(jié)束后,得到第一至第五讀私有鎖的狀態(tài)值,如表4所示:表4:第一至第五讀私有鎖狀態(tài)值(第三次遍歷后)第一讀私有鎖第二讀私有鎖第三讀私有鎖第四讀私有鎖第五讀私有鎖00001步驟305,由于第一至第四讀私有鎖均已經(jīng)為0,通過采用位函數(shù)確定第五讀私有鎖為遍歷的起點,此時可循環(huán)判斷第五讀私有鎖的狀態(tài),直至第五讀私有鎖處于放鎖狀態(tài)后,將第五讀私有鎖的狀態(tài)值設(shè)置為0,此時第一至第五讀私有鎖的狀態(tài)值均為0,可確定第一至第五讀私有鎖均處于放鎖狀態(tài)。通過采用上述異步循環(huán)遍歷的方式,若某個讀私有鎖處于放鎖狀態(tài),則可將該讀私有鎖設(shè)置為0,從而使得各個讀私有鎖之間無需相互等待,而且明顯減少了遍歷的讀私有鎖的個數(shù),能夠有效提高遍歷的效率。本發(fā)明實施例中,不同的寫鎖申請具有不同的寫優(yōu)先級。由于一次僅有一個寫鎖申請能夠獲得寫公共鎖,因此,在步驟203中,通過異步循環(huán)遍歷,確定第一至第n讀私有鎖均處于放鎖狀態(tài)后,若寫等待隊列中存在多個寫鎖申請,可根據(jù)各個寫鎖申請的優(yōu)先級,將寫公共鎖分配給寫優(yōu)先級最高的寫鎖申請。進一步地,確定寫優(yōu)先級最高的寫鎖申請?zhí)幚硗戤吅?,將寫公共鎖設(shè)置為放鎖狀態(tài),以便于其它的寫鎖申請獲取寫公共鎖。由于讀鎖申請的優(yōu)先級低于寫鎖申請的優(yōu)先級,因此,當(dāng)不存在寫鎖申請時,可處理讀鎖申請。本發(fā)明實施例中,多核系統(tǒng)中至少包括n個核,寫公共鎖對應(yīng)的n個讀私有鎖分別與n個核一一綁定。在步驟204中,獲取讀等待隊列中的m個讀鎖申請,其中,m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請。具體地,讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列可以 通過以下任一種方式得到:(1)各個讀鎖申請在到達讀等待隊列中均按照讀優(yōu)先級進行實時排序,例如,若讀鎖申請的讀優(yōu)先級是根據(jù)到達讀等待隊列中的時間決定的,即越早到達讀等待隊列中的讀鎖申請的讀優(yōu)先級越高,則各個讀鎖申請在到達后,可直接按照排隊的方式排列;若讀鎖申請的讀優(yōu)先級是預(yù)先設(shè)置的,則讀鎖申請x1先到達讀等待隊列中,隨后,讀鎖申請x2到達讀等待隊列中,此時,通過比較,若讀鎖申請x2的讀優(yōu)先級高于讀鎖申請x1,則讀鎖申請x2可排在讀鎖申請x1的前面;讀鎖申請x3到達讀等待隊列中后,通過比較,若讀鎖申請x3的讀優(yōu)先級高于讀鎖申請x1,且低于讀鎖申請x2,則讀鎖申請x3可排在讀鎖申請x1的前面,x2的后面,同樣地,其它后到達的讀鎖申請依次按照此種方式排列。(2)在需要獲取讀等待隊列中的讀鎖申請時,對讀等待隊列中的讀鎖申請按照讀優(yōu)先級進行排序,即各個讀鎖申請在到達讀等待隊列后,并未進行排序,而是后續(xù)統(tǒng)一排序。例如,讀等待隊列中包括讀鎖申請x1、讀鎖申請x2、……、讀鎖申請xx,這些讀鎖申請并未按照讀優(yōu)先級進行排序,在確定寫公共鎖處于放鎖狀態(tài),且寫等待隊列中不存在寫鎖申請后,對讀等待隊列中的各個讀鎖申請按照讀優(yōu)先級由高到低的順序進行統(tǒng)一排序。通過上述方式,對讀等待隊列中的讀鎖申請進行排列后,由于n個讀私有鎖可以分配給n個讀鎖申請,因此,若讀等待隊列中的讀鎖申請的個數(shù)大于n個,則此時,可獲取讀優(yōu)先級排名靠前的n個讀鎖申請;若讀等待隊列中的讀鎖申請的個數(shù)小于等于n個,則此時,可獲取讀等待隊列中所有的讀鎖申請。也就是說,獲取讀等待隊列中讀優(yōu)先級排名靠前的m個讀鎖申請,m≤n。隨后,從n個核中為所述m個讀鎖申請中的每個讀鎖申請分配一個核,將與已分配給m個讀鎖申請的m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。具體地,本發(fā)明實施例中,可通過m個核將與m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。圖4為本發(fā)明實施例中n個核所綁定的讀私有鎖內(nèi)存分布示意圖。下面結(jié)合圖6,對多核系統(tǒng)中包括w套讀寫鎖的情況進行說明。如圖4所示,讀私有鎖a1、讀私有鎖a2,…,讀私有鎖an對應(yīng)寫公共鎖a,并與寫公共鎖a共同構(gòu)成第一套讀寫鎖;讀私有鎖b1、讀私有鎖b2,…,讀私有鎖bn對應(yīng)寫公共鎖b,并與寫公共鎖b共同構(gòu)成第二套讀寫鎖;讀私有鎖c1、讀私有鎖c2,…,讀私有鎖cn對應(yīng)寫公共鎖c,并與寫公共鎖c共同構(gòu)成第三套讀寫鎖;讀私有鎖d1、讀私有鎖d2,…,讀私有鎖dn對應(yīng)寫公共鎖d,并與寫公共鎖d共同構(gòu)成第w套讀寫鎖。讀私有鎖a1、讀私有鎖b1、讀私有鎖c1、…,讀私有鎖d1(共有w個讀私有鎖)與核1綁定,讀私有鎖a2、讀私有鎖b2、讀私有鎖c2、…,讀私有鎖d2與核2綁定,讀私有鎖an、讀私有鎖bn、讀私有鎖cn、…,讀私有鎖dn與核n綁定。從圖4中可以看出,在多核系統(tǒng)中包括w套讀寫鎖的情況下,一個核可以與w套讀寫鎖中對應(yīng)不同寫公共鎖的w個讀私有鎖綁定。進一步地,與每個核綁定的各個讀私有鎖存儲在一個高速緩存行(英文:cacheline)中,這樣既解決了不同核刷同一高速緩存器的問題,也解決了內(nèi)存浪費的問題。同時,每個核綁定的第j個讀私有鎖在對應(yīng)的緩存行中的偏移量是一致的,從而保證同一寫公共鎖對應(yīng)的多個讀私有鎖cacheline對齊。本發(fā)明實施例中,假設(shè)一個cacheline是64個字節(jié),一個讀私有鎖內(nèi)存占4個字節(jié),則一個cacheline可以包含16個讀私有鎖,其中,16個讀私有鎖分別對應(yīng)16套讀寫鎖中的寫公共鎖。本發(fā)明實施例的讀寫鎖中包含的讀私有鎖的個數(shù)與核個數(shù)等同,若核個數(shù)為n=8,則每個寫公共鎖對應(yīng)的讀私有鎖分別分布在8個cacheline的指定偏移里,從而使得8個cacheline總共可以裝下16套讀寫鎖。而當(dāng)需要再申請第17套讀寫鎖時,則需再用到新一組的8個cacheline。由于寫公共鎖要被多個核(寫公共鎖對應(yīng)的多個讀私有鎖分別綁定的核)讀,因此,寫公共鎖沒有內(nèi)存分配位置的限制,可額外提供一個cacheline裝寫公共鎖即可,并在申請釋放時記錄下其在cacheline中的位置。本發(fā)明實施例中的讀寫鎖包括一個寫公共鎖和與寫公共鎖對應(yīng)的n個讀 私有鎖;確定寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請,若寫等待隊列中存在寫鎖申請,則將寫公共鎖設(shè)置為加鎖狀態(tài),并在確定n個讀私有鎖均處于放鎖狀態(tài)后,將寫公共鎖分配給寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從n個讀私有鎖中為m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài)其中,m個讀鎖申請為讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請。本發(fā)明實施例中,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。針對上述方法流程,本發(fā)明實施例還提供一種讀寫鎖的實現(xiàn)裝置,該裝置的具體內(nèi)容可以參照上述方法實施。本發(fā)明實施例中,一套讀寫鎖包括一個寫公共鎖和與該寫公共鎖對應(yīng)的n個讀私有鎖。基于此,圖5為本發(fā)明實施例提供的一種讀寫鎖的實現(xiàn)裝置的結(jié)構(gòu)示意圖,該裝置500包括:確定模塊501,用于確定所述寫公共鎖是否處于放鎖狀態(tài);判斷模塊502,用于在所述確定模塊確定寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請;處理模塊503,用于根據(jù)所述判斷模塊的判斷結(jié)果,若確定寫等待隊列中存在寫鎖申請,則將所述寫公共鎖設(shè)置為加鎖狀態(tài),并在確定所述n個讀私有鎖均處于放鎖狀態(tài)后,將所述寫公共鎖分配給所述寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若確定所述寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申 請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài);所述m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請;m、n為正整數(shù),且m≤n。較佳地,所述處理模塊503具體用于:將所述n個讀私有鎖的狀態(tài)值均設(shè)置為1;遍歷所述n個讀私有鎖,若所述n個讀私有鎖中第i個讀私有鎖處于放鎖狀態(tài),則將所述第i讀私有鎖的狀態(tài)值更新為0,其中,i為整數(shù)數(shù),且1≤i≤n;當(dāng)所述n個讀私有鎖的狀態(tài)值均為0,確定所述n個讀私有鎖均處于放鎖狀態(tài)。較佳地,所述處理模塊503具體用于:異步循環(huán)遍歷所述第一至第n讀私有鎖;所述異步循環(huán)遍歷是指每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖。較佳地,所述處理模塊503還用于:確定所述寫優(yōu)先級最高的寫鎖申請?zhí)幚硗戤吅?,將所述寫公共鎖設(shè)置為放鎖狀態(tài)。較佳地,所述讀寫鎖的實現(xiàn)裝置中至少包括n個核;所述n個讀私有鎖分別與所述n個核一一綁定;所述處理模塊503具體用于:從所述n個核中為所述m個讀鎖申請中的每個讀鎖申請分配一個核;將與已分配給所述m個讀鎖申請的m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。較佳地,所述讀寫鎖的實現(xiàn)裝置中包括w套讀寫鎖,第k個核與所述w套讀寫鎖中對應(yīng)不同寫公共鎖的m個讀私有鎖綁定;k、w為正整數(shù),1≤k≤n。較佳地,所述讀寫鎖的實現(xiàn)裝置中包括n個高速緩存行;所述處理模塊503還用于:將與一個所述核綁定的w個讀私有鎖存儲在一個高速緩存行中;每個所述核綁定的第j個讀私有鎖在對應(yīng)的高速緩存行中的偏移量是一致的,j為正整數(shù),1≤j≤w。本發(fā)明實施例中的讀寫鎖包括一個寫公共鎖和與寫公共鎖對應(yīng)的n個讀私有鎖;確定寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請,若寫等待隊列中存在寫鎖申請,則將寫公共鎖設(shè)置為加鎖狀態(tài),并在確定n個讀私有鎖均處于放鎖狀態(tài)后,將寫公共鎖分配給寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從n個讀私有鎖中為m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài)其中,m個讀鎖申請為讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請。本發(fā)明實施例中,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。基于相同的構(gòu)思,圖6為本發(fā)明實施例提供的另一種讀寫鎖的實現(xiàn)裝置的結(jié)構(gòu)示意圖,該裝置600包括:存儲器601,用于存儲至少一套讀寫鎖,一套讀寫鎖包括一個寫公共鎖和與所述寫公共鎖對應(yīng)的n個讀私有鎖,n為正整數(shù);多核處理器602,用于確定所述寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請,若所述寫等待隊列中存在寫鎖申請,則將所述寫公共鎖設(shè)置為加鎖狀態(tài),并在確定所述n個讀私有鎖均處于放鎖狀態(tài)后,將所述寫公共鎖分配給所述寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若所述寫等待隊列 中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從所述n個讀私有鎖中為所述m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給所述m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài);所述m個讀鎖申請為所述讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請;m、n為正整數(shù),且m≤n。較佳地,所述多核處理器602具體用于:將所述n個讀私有鎖的狀態(tài)值均設(shè)置為1;遍歷所述n個讀私有鎖,若所述n個讀私有鎖中第i個讀私有鎖處于放鎖狀態(tài),則將所述第i讀私有鎖的狀態(tài)值更新為0,其中,i為整數(shù),且1≤i≤n;當(dāng)所述n個讀私有鎖的狀態(tài)值均為0,確定所述n個讀私有鎖均處于放鎖狀態(tài)。較佳地,所述多核處理器602具體用于:異步循環(huán)遍歷所述n個讀私有鎖;所述異步循環(huán)遍歷是指每次循環(huán)遍歷的起點為狀態(tài)值為1的讀私有鎖。較佳地,所述多核處理器602還用于:確定所述寫優(yōu)先級最高的寫鎖申請?zhí)幚硗戤吅螅瑢⑺鰧懝叉i設(shè)置為放鎖狀態(tài)。較佳地,所述多核處理器602中包括n核;所述n個讀私有鎖與n個核一一綁定;所述多核處理器602具體用于:從所述n個核中為所述m個讀鎖申請的每個讀鎖申請分配一個核;將與已分配給所述m個讀鎖申請的m個核綁定的m個讀私有鎖設(shè)置為加鎖狀態(tài)。較佳地,所述存儲器601中存儲有w套讀寫鎖;第k個核與所述w套讀寫鎖中對應(yīng)不同寫公共鎖的m個讀私有鎖綁定;k、w為正整數(shù),1≤k≤n。較佳地,所述存儲器601中包括n個高速緩存行;所述多核處理器602還用于:將與一個所述核綁定的m個讀私有鎖存儲在一個所述高速緩存行中;每個所述核綁定的第j個讀私有鎖在對應(yīng)的緩存行中的偏移量是一致的,j為正整數(shù),1≤j≤w。其中,總線架構(gòu)可以包括任意數(shù)量的互聯(lián)的總線和橋,具體由多核處理器代表的處理器和存儲器代表的存儲器的各種電路鏈接在一起??偩€架構(gòu)還可以將諸如外圍設(shè)備、穩(wěn)壓器和功率管理電路等之類的各種其他電路鏈接在一起,這些都是本領(lǐng)域所公知的,因此,本文不再對其進行進一步描述??偩€接口提供接口,多核處理器負責(zé)管理總線架構(gòu)和通常的處理,存儲器可以存儲處理器在執(zhí)行操作時所使用的數(shù)據(jù)。從上述內(nèi)容可以看出:本發(fā)明實施例中的讀寫鎖包括一個寫公共鎖和與寫公共鎖對應(yīng)的n個讀私有鎖;確定寫公共鎖處于放鎖狀態(tài)后,判斷寫等待隊列中是否存在寫鎖申請,若寫等待隊列中存在寫鎖申請,則將寫公共鎖設(shè)置為加鎖狀態(tài),并在確定n個讀私有鎖均處于放鎖狀態(tài)后,將寫公共鎖分配給寫等待隊列中寫優(yōu)先級最高的寫鎖申請;若寫等待隊列中不存在寫鎖申請,則獲取讀等待隊列中的m個讀鎖申請,從n個讀私有鎖中為m個讀鎖申請中的每個讀鎖申請分配一個讀私有鎖,并將已分配給m個讀鎖申請的m個讀私有鎖設(shè)置為加鎖狀態(tài)其中,m個讀鎖申請為讀等待隊列中的讀鎖申請按照讀優(yōu)先級由高到低的順序排列后,得到的排名靠前的m個讀鎖申請。本發(fā)明實施例中,由于為m個讀鎖申請中的每個讀鎖申請均分配一個讀私有鎖,從而使得m個讀鎖申請的讀者之間實現(xiàn)并發(fā),能夠避免多個讀者頻繁操作同一讀寫鎖導(dǎo)致讀寫鎖性能嚴重下降的問題,并通過將寫公共鎖設(shè)置為加鎖狀態(tài),從而使得讀等待隊列中讀鎖申請的讀者均無法獲取到讀私有鎖,使得讀者之間相互公平,避免了現(xiàn)有技術(shù)中由于寫者遍歷讀寫鎖存在先后順序而產(chǎn)生的不公平性問題。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
汽车| 芜湖市| 巴彦县| 明溪县| 石景山区| 武强县| 龙陵县| 左贡县| 兴城市| 隆安县| 淮滨县| 壤塘县| 天长市| 嘉定区| 灌云县| 太康县| 玛曲县| 伊金霍洛旗| 赤城县| 保山市| 巴彦县| 武穴市| 西丰县| 罗平县| 永靖县| 成安县| 乐陵市| 云南省| 泽普县| 天柱县| 新和县| 新化县| 芜湖市| 宾阳县| 灵台县| 龙江县| 文化| 刚察县| 库车县| 南华县| 兴文县|