專利名稱::一種鎖機(jī)制的加鎖方法、解鎖方法和實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及無(wú)信號(hào)量的鎖實(shí)現(xiàn)技術(shù),尤其涉及的是,在嵌入式內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)中,一種鎖機(jī)制的加鎖方法、解鎖方法和實(shí)現(xiàn)方法。
背景技術(shù):
:嵌入式主內(nèi)存數(shù)據(jù)庫(kù)由于具有極強(qiáng)的實(shí)時(shí)性而受到越來(lái)越多的關(guān)注,嵌入式數(shù)據(jù)庫(kù)強(qiáng)實(shí)時(shí)性來(lái)自于內(nèi)存事務(wù)并發(fā),并發(fā)的實(shí)現(xiàn)主要靠引入鎖機(jī)制。目前各種主內(nèi)存數(shù)據(jù)庫(kù)鎖系統(tǒng)的實(shí)現(xiàn)都采用了信號(hào)量的方式,信號(hào)量方式的缺點(diǎn)是獲取和釋放信號(hào)量的時(shí)間相對(duì)較長(zhǎng),特別是在嵌入式系統(tǒng)中,信號(hào)量的等待意味著任務(wù)的切換,這是非常耗費(fèi)時(shí)間的。目前嵌入式系統(tǒng)實(shí)現(xiàn)鎖機(jī)制主要采用以下方法1、采用信號(hào)量機(jī)制,一個(gè)最小單位設(shè)置一個(gè)信號(hào)量,這樣一個(gè)鎖的加鎖可能需要很多個(gè)信號(hào)量的獲取,但是獲取這些信號(hào)量需要大量的時(shí)間。2、采用非信號(hào)量進(jìn)程延遲機(jī)制,但是在優(yōu)先級(jí)搶占系統(tǒng)中,該方法無(wú)法正確運(yùn)行。3、采用任務(wù)等待信號(hào)量機(jī)制,該方法實(shí)現(xiàn)了一個(gè)鎖只需要一個(gè)信號(hào)量。嵌入式實(shí)時(shí)操作系統(tǒng)vxworks,在任務(wù)調(diào)度的基礎(chǔ)上增加了進(jìn)程調(diào)度的系統(tǒng),習(xí)慣稱為二次調(diào)度系統(tǒng),其中,一個(gè)進(jìn)程等待信號(hào)量的時(shí)候會(huì)阻塞整個(gè)任務(wù),導(dǎo)致同一任務(wù)下的其他進(jìn)程無(wú)法完成事務(wù),造成死鎖,因此上述現(xiàn)有方法均無(wú)法在優(yōu)先級(jí)搶占調(diào)度的二次調(diào)度系統(tǒng)中實(shí)現(xiàn)。因此,現(xiàn)有技術(shù)存在缺陷,需要改進(jìn)。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題是在優(yōu)先級(jí)搶占調(diào)度的二次調(diào)度系統(tǒng)中,如何實(shí)現(xiàn)鎖機(jī)制。本發(fā)明的技術(shù)方案如下一種鎖機(jī)制的加鎖方法,其包括以下步驟Al、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;A2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行A3;其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);A3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng);A4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行A3。所述的加鎖方法,其中,步驟A1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;并且,步驟A2中,申請(qǐng)各資源時(shí),是在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作。一種鎖機(jī)制的解鎖方法,其包括以下步驟Bl、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);B2、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。所述的解鎖方法,其中,步驟B1之前還執(zhí)行以下步驟B0、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟B1。一種鎖機(jī)制的實(shí)現(xiàn)方法,其包括以下加鎖步驟和解鎖步驟;所述加鎖步驟包括以下步驟Cl、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;C2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行C3;其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);C3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng);C4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行C3;所述解鎖步驟包括以下步驟C5、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);C6、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。所述的實(shí)現(xiàn)方法,其中,步驟C1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;并且,步驟C2中,申請(qǐng)各資源時(shí),是在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作;并且,步驟C6中,4巴對(duì)應(yīng)資源的預(yù)約數(shù)減一時(shí),是在所述資源列表中,將對(duì)應(yīng)資源的預(yù)約數(shù)進(jìn)行減一操作。所述的實(shí)現(xiàn)方法,其中,步驟C5之前還執(zhí)行以下步驟C50、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟C5。所述的實(shí)現(xiàn)方法,其中,步驟C50之前還執(zhí)行以下步驟采用定時(shí)監(jiān)測(cè)機(jī)制,判斷是否超時(shí)未響應(yīng),是則執(zhí)行C50。所述的實(shí)現(xiàn)方法,其中,步驟C6中,解阻塞當(dāng)前鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程之前,還執(zhí)行以下步驟判斷該進(jìn)程是否有效,否則不作后續(xù)處理。所述的實(shí)現(xiàn)方法,其中,步驟C2至步驟C4的操作,以及步驟C5至步驟C6的操作,分別采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。采用上述方案,本發(fā)明提出了不基于信號(hào)量等待的鎖機(jī)制,有效地在優(yōu)先級(jí)搶占二次調(diào)度系統(tǒng)中,實(shí)現(xiàn)了快速鎖機(jī)制,為事務(wù)的并發(fā)提供高效的支持。圖1為本發(fā)明方法的一種實(shí)施方式的封鎖流程圖;圖2為本發(fā)明方法的一種實(shí)施方式的解鎖流程圖。具體實(shí)施方式以下結(jié)合附圖和具體實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。本發(fā)明的主旨在于提出一種基于進(jìn)程二次調(diào)度的非信號(hào)量鎖實(shí)現(xiàn)機(jī)制,該機(jī)制不基于信號(hào)量等待;本發(fā)明通過(guò)為每一個(gè)可以加鎖的資源維護(hù)一個(gè)預(yù)約數(shù),并且維護(hù)一個(gè)鎖等待隊(duì)列,來(lái)實(shí)現(xiàn)上述機(jī)制。如圖l所示,本發(fā)明提供了一種鎖機(jī)制的加鎖方法,其包括以下步驟Al、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;例如,某一資源的預(yù)設(shè)值為0時(shí),代表該資源的狀態(tài)為未預(yù)約;或者,也可以定義為,某一資源的預(yù)設(shè)值為1時(shí),代表該資源的狀態(tài)為未預(yù)約;本發(fā)明對(duì)預(yù)設(shè)值不作任何限制。A2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行A3。例如,預(yù)設(shè)值為0時(shí),代表該資源的狀態(tài)為未預(yù)約;當(dāng)某一進(jìn)程申請(qǐng)某一資源時(shí),則對(duì)該資源的預(yù)約數(shù)進(jìn)行加一操作,將其預(yù)約數(shù)設(shè)為1;當(dāng)另一進(jìn)程也申請(qǐng)?jiān)撡Y源時(shí),則對(duì)該資源的預(yù)約數(shù)再進(jìn)行加一操作,將其預(yù)約數(shù)設(shè)為2。其中,所述鎖等待隊(duì)列,也稱為解鎖集,一個(gè)例子如下表所示,其為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)(PID,processidentity,即鎖定的進(jìn)程的標(biāo)識(shí))、待申請(qǐng)資源(WAIT_RES)、申請(qǐng)成功資源(HAVE—RES)和待調(diào)度隊(duì)列標(biāo)識(shí)(PEND—QUE)。其中,進(jìn)程標(biāo)識(shí)項(xiàng)用于存儲(chǔ)進(jìn)程標(biāo)識(shí),以標(biāo)記該鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程;申請(qǐng)成功資源項(xiàng)用于標(biāo)記該進(jìn)程所成功申請(qǐng)得到的資源;待申請(qǐng)資源項(xiàng)用于標(biāo)記該進(jìn)程所申請(qǐng)的資源未成功,需等待調(diào)度;待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng)用于標(biāo)記其它進(jìn)程的進(jìn)程標(biāo)識(shí),表示當(dāng)其它進(jìn)程所申請(qǐng)的資源,故該鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程占用,待該進(jìn)程執(zhí)行釋放后,將其需要的資源配發(fā)給所述其它進(jìn)程。假設(shè)有9個(gè)資源分別為1、2、3、4、5、6、7、8、9,假設(shè)進(jìn)程1首先進(jìn)行封鎖,需要資源為1、2、4、6、9。*LOCKWAIT—RESHAVE—RESPEND—QUEPID11,2,4,6,9A3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng)。A4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行A3。在具體應(yīng)用中,可以采用資源列表,管理各資源的預(yù)約數(shù),或者管理各資源及其預(yù)約數(shù);一個(gè)實(shí)施例是,步驟A1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;這樣,在步驟A2中,當(dāng)申請(qǐng)各資源時(shí),則在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作。上述的各個(gè)實(shí)施例,可以分別采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。相應(yīng)的,如圖2所示,本發(fā)明提供了一種鎖機(jī)制的解鎖方法,其包括以下步驟Bl、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);B2、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。一個(gè)實(shí)施例是,步驟B1之前還執(zhí)行以下步驟B0、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟B1。又如,在此實(shí)施例的基礎(chǔ)上,還可以在BO之前在執(zhí)行以下步驟采用定時(shí)監(jiān)測(cè)機(jī)制,判斷是否超時(shí)未響應(yīng),是則執(zhí)行B0。又一個(gè)實(shí)施例是,步驟B2中,解阻塞當(dāng)前鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程之前,還執(zhí)行以下步驟判斷該進(jìn)程是否有效,否則不作后續(xù)處理,即無(wú)需解阻塞當(dāng)前鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程及其后續(xù)操作。一般來(lái)說(shuō),可以根據(jù)PID判斷該進(jìn)程是否還存在,否則認(rèn)為其已經(jīng)失效。更好的是,同上所述,可以采用資源列表,管理各資源的預(yù)約數(shù),或者管理各資源及其預(yù)約數(shù);一個(gè)實(shí)施例是,首先,預(yù)設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;這樣,在步驟B2中,當(dāng)解阻塞對(duì)應(yīng)的進(jìn)程后,則在所述資源列表中,把對(duì)應(yīng)資源的預(yù)約數(shù)進(jìn)行減一操作。同樣的,上迷的各個(gè)實(shí)施例,可以分別采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。綜合上述的加鎖方法和解鎖方法,本發(fā)明還提供了一種鎖機(jī)制的實(shí)現(xiàn)方法,其包括以下加鎖步驟和解鎖步驟。所述加鎖步驟包括以下步驟Cl、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;同樣的,例如,某一資源的預(yù)設(shè)值為0時(shí),代表該資源的狀態(tài)為未預(yù)約;或者,也可以定義為,某一資源的預(yù)設(shè)值為100時(shí),代表該資源的狀態(tài)為未預(yù)約;本發(fā)明對(duì)預(yù)設(shè)值不作任何限制。C2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行C3;其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);各項(xiàng)含義與上述加鎖方法的描述相同,在此不再贅述。C3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng)。C4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行C3。其中,步驟C2至步驟C4的操作,可以采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。所述解鎖步驟包括以下步驟C5、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí)。例如,步驟C5之前還可以執(zhí)行以下步驟C50、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟C5。又如,在此基礎(chǔ)上,步驟C50之前還執(zhí)行以下步驟采用定時(shí)監(jiān)測(cè)機(jī)制,判斷是否超時(shí)未響應(yīng),是則執(zhí)行C50。C6、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。例如,在解阻塞當(dāng)前鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程之前,還執(zhí)行以下步驟判斷該進(jìn)程是否有效,否則不作后續(xù)處理。采用資源列表時(shí),一個(gè)實(shí)施例是,步驟C1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;并且,步驟C2中,申請(qǐng)各資源時(shí),是在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作;并且,步驟C6中,把對(duì)應(yīng)資源的預(yù)約數(shù)減一時(shí),是在所述資源列表中,將對(duì)應(yīng)資源的預(yù)約數(shù)進(jìn)行減一操作。其中,步驟C5至步驟C6的操作,可以采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。以下是本發(fā)明所述實(shí)現(xiàn)方法的一個(gè)完整的例子。1、加鎖流程,如圖1所示,其參數(shù)包括PID、資源列表。1)TaskLock;2)申請(qǐng)所有未預(yù)約資源;3)給資源列表中所有資源的預(yù)約數(shù)加一;4)若資源已經(jīng)完全申請(qǐng)到則TaskUnlock繼續(xù)事務(wù)操作;5)若資源不滿足要求,逆向搜索等待隊(duì)列中的資源,若某一項(xiàng)含有需要的資源則在該項(xiàng)的解鎖集尾部添加自己,直到所有的資源都已經(jīng)有了通知對(duì)象;7)TaskUnlock;8)掛起自己。2,解鎖流程,如圖2所示,其參數(shù)為事務(wù)隊(duì)列中的一項(xiàng);解鎖時(shí)機(jī),一般為隊(duì)頭節(jié)點(diǎn)無(wú)效或者一個(gè)事務(wù)已經(jīng)執(zhí)行到最后。1)TaskLock;2)依次將資源列表中的資源分配給解鎖集中的鎖節(jié)點(diǎn),如果某鎖節(jié)點(diǎn)已經(jīng)申請(qǐng)到所有資源,則解阻塞該進(jìn)程,解阻塞之前可以先判斷是否有效,無(wú)效則不作處理,把對(duì)應(yīng)資源的預(yù)約數(shù)減一;3)TaskUnlock。實(shí)現(xiàn)方法或解鎖方法的一個(gè)特例是進(jìn)行死鎖檢測(cè)。如果某一個(gè)進(jìn)程實(shí)例訪問(wèn)了數(shù)據(jù)庫(kù),并且其事務(wù)排在事務(wù)隊(duì)列頭部,則當(dāng)該實(shí)例被別的進(jìn)程殺死后,其不能有效解鎖釋放資源,這樣會(huì)造成數(shù)據(jù)庫(kù)的死鎖。因此本發(fā)明引入了定時(shí)監(jiān)測(cè)機(jī)制,如果隊(duì)頭節(jié)點(diǎn)無(wú)效,則解鎖隊(duì)頭節(jié)點(diǎn)。如果某一個(gè)進(jìn)程實(shí)例在隊(duì)列的中間,則如果其被異常殺死之后,事務(wù)并不被刪除,需要等到其前面所有事務(wù)完成之后才進(jìn)行解鎖,可以由死鎖檢測(cè)機(jī)制檢測(cè)到,這樣的情況非常少見,只是釆用的一種預(yù)防手段。下面再給出一個(gè)具體的例子,對(duì)本發(fā)明各方法進(jìn)行詳細(xì)說(shuō)明。假設(shè)有9個(gè)資源分別為1、2、3、4、5、6、7、8、9;每個(gè)資源有一個(gè)初始預(yù)約凄t為0。假設(shè)進(jìn)程l首先進(jìn)行封鎖,其需要資源為1、2、4、6、9。進(jìn)程1封鎖如下表所示LOCKWAIT—RESHAVE—RESPEND一QUEPID11,2,4,6,9進(jìn)程l需要資源l、2、4、6、9;這時(shí)候預(yù)約數(shù)都為O,所以全部資源均能夠得到滿足,進(jìn)程l將資源l、2、4、6、9的預(yù)約數(shù)力。1,封鎖完成,事務(wù)執(zhí)行。假設(shè)在進(jìn)程1未完成的時(shí)候,進(jìn)程2搶占運(yùn)行,需要資源1、2、5、8。進(jìn)程2封鎖后如下表所示LOCKWAIT—RESHAVE—RESPEND—QUEPID11,2,4,6,9PID2PID21,2,5,8進(jìn)程2在進(jìn)程1的事務(wù)沒(méi)有完成的時(shí)候來(lái)到,這個(gè)時(shí)候資源5、8的預(yù)約數(shù)為0,進(jìn)程2可以申請(qǐng)到資源5、8,但是資源1、2的預(yù)約數(shù)為1,所以需要等待資源1、2,此時(shí),逆向查找隊(duì)列中的資源列表,在進(jìn)程1的鎖節(jié)點(diǎn)PID1處發(fā)現(xiàn)了資源1、2,因此在其該鎖節(jié)點(diǎn)末尾的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加PID2,將資源l、2、5、8的預(yù)約數(shù)力口1。假設(shè)進(jìn)程3需要三個(gè)資源3、4、8。進(jìn)程3封鎖后如下表所示<table>tableseeoriginaldocumentpage14</column></row><table>進(jìn)程3發(fā)現(xiàn)資源3的預(yù)約數(shù)為0,資源4和8的預(yù)約數(shù)不為0,因此需要等待資源4、8,逆向搜索資源隊(duì)列,第一次在PID2處找到了資源8,因此把自己的PID的加入到PID2的阻塞隊(duì)列中,第一次在PID1處找到了資源4,因此把自己的PID加入到PID1的阻塞隊(duì)列尾。進(jìn)程1解鎖如下表所示TASKLOCK;<table>tableseeoriginaldocumentpage14</column></row><table>進(jìn)程l執(zhí)行完成釋放,首先找到解鎖集中第一個(gè)元素PID2,將其需要的資源1、2給他,發(fā)現(xiàn)PID2已經(jīng)可以調(diào)入運(yùn)行,調(diào)入。<table>tableseeoriginaldocumentpage14</column></row><table>接下來(lái)取下一次解鎖元素PID3,其需要的資源4,PID1可以給出,但是檢測(cè)其資源并沒(méi)有完全獲取,不作任何動(dòng)作。<table>tableseeoriginaldocumentpage15</column></row><table>將PID1從隊(duì)列中刪除,其所用資源l、2、4、6、9的預(yù)約數(shù)減一。TASKUNLOCK。釆用上述方法,有效地在優(yōu)先級(jí)搶占二次調(diào)度系統(tǒng)中實(shí)現(xiàn)快速鎖機(jī)制,為事務(wù)的并發(fā)提供高效的支持。應(yīng)當(dāng)理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)上述說(shuō)明加以改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。權(quán)利要求1、一種鎖機(jī)制的加鎖方法,其包括以下步驟A1、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;A2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行A3;其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);A3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng);A4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行A3。2、根據(jù)權(quán)利要求1所述的加鎖方法,其特征在于,步驟A1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;并且,步驟A2中,申請(qǐng)各資源時(shí),是在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作。3、一種鎖機(jī)制的解鎖方法,其包括以下步驟Bl、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);B2、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。4、根據(jù)權(quán)利要求3所述的解鎖方法,其特征在于,步驟Bl之前還執(zhí)行以下步驟B0、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟BL5、一種鎖機(jī)制的實(shí)現(xiàn)方法,其包括以下加鎖步驟和解鎖步驟;所述加鎖步驟包括以下步驟Cl、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,用于標(biāo)記各資源的狀態(tài)為未預(yù)約;C2、申請(qǐng)各資源時(shí),對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行C3;其中,所述鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);C3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索所述鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng);C4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行C3;所述解鎖步驟包括以下步驟C5、按順序?qū)①Y源分配給鎖等待隊(duì)列中的鎖節(jié)點(diǎn);其中,所迷鎖等待隊(duì)列為各鎖節(jié)點(diǎn)分別設(shè)置以下項(xiàng)進(jìn)程標(biāo)識(shí)、待申請(qǐng)資源、申請(qǐng)成功資源和待調(diào)度隊(duì)列標(biāo)識(shí);C6、對(duì)于某一鎖節(jié)點(diǎn)所申請(qǐng)的各資源,判斷其是否全部申請(qǐng)成功,是則解阻塞其對(duì)應(yīng)的進(jìn)程,把對(duì)應(yīng)資源的預(yù)約數(shù)減一。6、根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)方法,其特征在于,步驟C1具體執(zhí)行以下步驟設(shè)置資源列表,用于管理各資源的預(yù)約數(shù);初始化所述資源列表的各資源的預(yù)約數(shù)分別為預(yù)設(shè)值;并且,步驟C2中,申請(qǐng)各資源時(shí),是在所述資源列表中,對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作;并且,步驟C6中,把對(duì)應(yīng)資源的預(yù)約數(shù)減一時(shí),是在所迷資源列表中,將對(duì)應(yīng)資源的預(yù)約數(shù)進(jìn)行減一操作。7、根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)方法,其特征在于,步驟C5之前還執(zhí)行以下步驟C50、判斷所述鎖等待隊(duì)列的頭節(jié)點(diǎn)無(wú)效,或者判斷事務(wù)已經(jīng)執(zhí)行到最后,則執(zhí)行步驟C5。8、根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)方法,其特征在于,步驟C50之前還執(zhí)行以下步驟采用定時(shí)監(jiān)測(cè)機(jī)制,判斷是否超時(shí)未響應(yīng),是則執(zhí)行C50。9、根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)方法,其特征在于,步驟C6中,解阻塞當(dāng)前鎖節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程之前,還執(zhí)行以下步驟判斷該進(jìn)程是否有效,否則不作后續(xù)處理。10、根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)方法,其特征在于,步驟C2至步驟C4的操作,以及步驟C5至步驟C6的操作,分別采用獨(dú)占任務(wù)形式實(shí)現(xiàn)。全文摘要本發(fā)明公開了一種鎖機(jī)制的加鎖方法、解鎖方法和實(shí)現(xiàn)方法,加鎖方法包括A1、初始化各資源的預(yù)約數(shù)分別為預(yù)設(shè)值,A2、對(duì)所申請(qǐng)各資源的預(yù)約數(shù)進(jìn)行加一操作,將當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)加入到鎖等待隊(duì)列,并判斷是否全部申請(qǐng)成功,否則執(zhí)行A3;A3、對(duì)于申請(qǐng)失敗的各資源,逆向搜索鎖等待隊(duì)列,判斷在其中是否搜索得到所需的資源,是則在搜索結(jié)果相關(guān)鎖節(jié)點(diǎn)的待調(diào)度隊(duì)列標(biāo)識(shí)項(xiàng),添加當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí),并將搜索得到的資源添加到當(dāng)前進(jìn)程相關(guān)的鎖節(jié)點(diǎn)的待申請(qǐng)資源項(xiàng);A4、判斷申請(qǐng)失敗的各資源是否全部搜索完成,否則繼續(xù)執(zhí)行A3。從而有效地在優(yōu)先級(jí)搶占二次調(diào)度系統(tǒng)中,實(shí)現(xiàn)了快速鎖機(jī)制,為事務(wù)的并發(fā)提供高效的支持。文檔編號(hào)G06F9/46GK101256509SQ20081006647公開日2008年9月3日申請(qǐng)日期2008年4月7日優(yōu)先權(quán)日2008年4月7日發(fā)明者鵬萬(wàn)申請(qǐng)人:中興通訊股份有限公司