專利名稱:信息處理裝置及信息處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息處理技術(shù)、具體涉及處理多個(gè)線程(thread)的信息處理裝置及信息處理方法。
背景技術(shù):
近年的信息處理裝置具備多線程技術(shù),該多線程技術(shù)實(shí)現(xiàn)可同時(shí)執(zhí)行多個(gè)處理的多任務(wù)環(huán)境,并且這些處理能在處理內(nèi)部生成多個(gè)線程進(jìn)行并行處理。處理在執(zhí)行時(shí)被分配固有的資源和地址空間,無法訪問其它處理的區(qū)域。與此不同,線程為處理內(nèi)部生成的執(zhí)行單位,各線程可對(duì)處理內(nèi)的區(qū)域自由地相互訪問。線程為操作系統(tǒng)分配CPU (CentralProcessing Unit :中央處理單元)的執(zhí)行時(shí)間的基本執(zhí)行單位。在這樣并行處理多個(gè)線程的環(huán)境中,通過在共有存儲(chǔ)器內(nèi)設(shè)置隊(duì)列,使得能生成請(qǐng)求要消費(fèi)的數(shù)據(jù)和資源的線程的等待隊(duì)列,可在保持處理器和線程的獨(dú)立性的同時(shí)實(shí)現(xiàn)·排他控制。
發(fā)明內(nèi)容
〔發(fā)明所要解決的課題〕一般來說,某線程試圖從隊(duì)列中取出數(shù)據(jù)時(shí),如果隊(duì)列中不存在數(shù)據(jù),則該線程成為忙循環(huán)(busy loop)狀態(tài),直到由其它線程保存新數(shù)據(jù)。在此期間,CPU資源被浪費(fèi),因此,存在如下問題,即,這種狀態(tài)越出現(xiàn),整體的處理效率就越下降。此外,在上述那樣的技術(shù)中,線程請(qǐng)求訪問數(shù)據(jù)和資源時(shí),首先需要操作隊(duì)列,進(jìn)入等待隊(duì)列。但為了保障保存在隊(duì)列中的等待隊(duì)列的數(shù)據(jù)的匹配性,需要在隊(duì)列的操作中設(shè)置控制機(jī)構(gòu)。因此,最終線程實(shí)現(xiàn)對(duì)數(shù)據(jù)和資源的訪問需要多個(gè)手續(xù)。本發(fā)明是鑒于這樣的課題而研發(fā)的,其目的在于提供一種可防止因線程訪問隊(duì)列而導(dǎo)致的處理效率下降的信息處理技術(shù)。本發(fā)明的目的還在于提供一種可提高線程對(duì)數(shù)據(jù)和資源的訪問的處理效率的信息處理技術(shù)?!灿糜诮鉀Q課題的手段〕本發(fā)明的一個(gè)方案涉及信息處理裝置。該信息處理裝置包括保存由各個(gè)數(shù)據(jù)的隊(duì)列構(gòu)成的數(shù)據(jù)用隊(duì)列的存儲(chǔ)器,和對(duì)將所生成的數(shù)據(jù)加入到數(shù)據(jù)用隊(duì)列中的數(shù)據(jù)生成線程和將數(shù)據(jù)從數(shù)據(jù)用隊(duì)列中取出的數(shù)據(jù)消費(fèi)線程的至少任一者進(jìn)行處理的一個(gè)以上的處理器;處理器在數(shù)據(jù)消費(fèi)線程的處理中,當(dāng)數(shù)據(jù)用隊(duì)列中不存在應(yīng)取出的數(shù)據(jù)時(shí),向該數(shù)據(jù)用隊(duì)列中加入數(shù)據(jù)消費(fèi)線程的識(shí)別信息,在數(shù)據(jù)生成線程的處理中,在將數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列中時(shí),若該數(shù)據(jù)用隊(duì)列中有數(shù)據(jù)消費(fèi)線程的識(shí)別信息,則改變數(shù)據(jù)的存儲(chǔ)位置,以使得該數(shù)據(jù)消費(fèi)線程能夠取得它。本發(fā)明的另一個(gè)方案涉及信息處理方法。該信息處理方法包括在由處理器執(zhí)行的第I線程的處理中,在嘗試從保存于存儲(chǔ)器的隊(duì)列取出數(shù)據(jù)時(shí),若應(yīng)取出的數(shù)據(jù)不存在,則將第I線程的識(shí)別信息加入該隊(duì)列的步驟;在由處理器執(zhí)行的第2線程的處理中,在向隊(duì)列加入數(shù)據(jù)時(shí),若該隊(duì)列中有第I線程的識(shí)別信息,則將數(shù)據(jù)提供給該第I線程的步驟。本發(fā)明的另一個(gè)方案涉及信息處理裝置。該信息處理裝置包括處理器,對(duì)訪問需要同步管理的對(duì)象的線程進(jìn)行處理;存儲(chǔ)器,保存具有鏈接列表構(gòu)造的隊(duì)列,該隊(duì)列表示請(qǐng)求訪問對(duì)象的線程的等待隊(duì)列,該鏈接列表將各線程的識(shí)別信息用指向隊(duì)列中的下一線程的識(shí)別信息的指針連結(jié);作為指向鏈接列表中的第一個(gè)線程的識(shí)別信息的指針的頭指針被附加了關(guān)于對(duì)象的當(dāng)前狀態(tài)的信息;線程請(qǐng)求訪問對(duì)象時(shí),在參照被附加于頭指針的關(guān)于對(duì)象的當(dāng)前狀態(tài)的信息,判斷可否訪問,若不能訪問,則將線程的識(shí)別信息加入隊(duì)列。本發(fā)明的另一方案涉及信息處理方法。該信息處理方法包括當(dāng)需要訪問需進(jìn)行同步管理的對(duì)象時(shí),參照存儲(chǔ)于存儲(chǔ)器中的具有鏈接列表構(gòu)造的隊(duì)列的步驟,該隊(duì)列表示請(qǐng)求訪問該對(duì)象的線程的等待隊(duì)列,該鏈接列表將各線程的識(shí)別信息用指向隊(duì)列中的下一個(gè)線程的識(shí)別信息的指針連結(jié);取得作為指向鏈接列表中的第一個(gè)線程的識(shí)別信息指針的頭指針?biāo)桓郊拥摹㈥P(guān)于對(duì)象的當(dāng)前狀態(tài)的信息,判斷是否可以訪問的步驟;以及無法訪問時(shí),將線程的識(shí)別信息加入隊(duì)列的步驟。·
此外,將以上構(gòu)成要素的任意組合、本發(fā)明的表現(xiàn)形式在方法、裝置、系統(tǒng)、計(jì)算機(jī)程序、記錄有計(jì)算機(jī)程序的記錄介質(zhì)等間變換后的實(shí)施方式,作為本發(fā)明的方案也是有效的?!舶l(fā)明效果〕通過本發(fā)明,可實(shí)現(xiàn)與排他控制相關(guān)的處理效率下降較少的信息處理。
圖I是表示本實(shí)施方式中的信息處理裝置的結(jié)構(gòu)的圖。圖2是示意性地表示本實(shí)施方式中存儲(chǔ)在隊(duì)列中的等待隊(duì)列的數(shù)據(jù)結(jié)構(gòu)例的圖。圖3是表示向本實(shí)施方式中處于無元素狀態(tài)的隊(duì)列中推入(push)元素的操作方式的圖。圖4是表示向本實(shí)施方式中存有元素的狀態(tài)的隊(duì)列中推入新元素的操作方式的圖。圖5是表示從本實(shí)施方式中存有多個(gè)元素的狀態(tài)的隊(duì)列中移除(pop)元素的操作方式的圖。圖6是表示從本實(shí)施方式中只存有一個(gè)元素的狀態(tài)的隊(duì)列中移除該元素的操作方式的圖。圖7是表示本實(shí)施方式中線程操作隊(duì)列的步驟的流程圖。圖8是表示在本實(shí)施方式中,假定隊(duì)列中沒有要移除的數(shù)據(jù)時(shí)的基本處理的流程圖。圖9是表示在本實(shí)施方式中,假定隊(duì)列中沒有要移除的數(shù)據(jù)時(shí)的基本處理的流程圖。圖10是表示本實(shí)施方式中將線程的等待隊(duì)列編入數(shù)據(jù)隊(duì)列和包隊(duì)列這兩者中的流程圖。圖11是表示本實(shí)施方式中將線程的等待隊(duì)列編入數(shù)據(jù)隊(duì)列和包隊(duì)列這兩者中的流程圖。
圖12是示意性地表示本實(shí)施方式中為實(shí)現(xiàn)信號(hào)量(semaphore)功能而存儲(chǔ)于隊(duì)列的鏈接列表的結(jié)構(gòu)及其操作方式的圖。圖13是表示本實(shí)施方式中資源與請(qǐng)求數(shù)相比不足時(shí)操作鏈接列表的方式的圖。圖14是表示本實(shí)施方式中在有等待獲得資源的線程的情況下釋放資源時(shí)的鏈接列表的操作方式的圖。圖15是表示本實(shí)施方式中請(qǐng)求資源時(shí)的處理步驟的流程圖。圖16是表示本實(shí)施方式中釋放資源時(shí)的處理步驟的流程圖。圖17是表示本實(shí)施方式中,在由其它線程獲得了 Wlock (寫鎖)的期間,產(chǎn)生請(qǐng)求 Rlock (讀鎖)的線程時(shí)的鏈接列表的操作方式的圖。圖18是表示本實(shí)施方式中獲得了 Wlock的線程解除Wlock時(shí)的鏈接列表的操作方式的圖。
具體實(shí)施例方式圖I表示本實(shí)施方式中的信息處理裝置的結(jié)構(gòu)。信息處理裝置10包括處理單元12a、…、12η和共有存儲(chǔ)器14,它們連接于主總線20。處理單元12a、…、12η分別包括處理器16a、…、16η,以及本地存儲(chǔ)器18a、…、18η。處理單兀12a、…、12η可以分別包括處理器16a、…、16η,以及本地存儲(chǔ)器18a、…、18η以外的構(gòu)成部件,此處省略圖不。信息處理裝置10中,為實(shí)現(xiàn)各種功能而生成的多個(gè)線程在處理單元12a、…、12η中被并行處理。共有存儲(chǔ)器14中存儲(chǔ)用于處理線程的程序及各種數(shù)據(jù),處理器16a、…、16η將所需數(shù)據(jù)從共有存儲(chǔ)器14讀出到屬于自己的處理單元的本地存儲(chǔ)器18a、…、18η后,開始進(jìn)行線程處理。當(dāng)分配給開始的線程的時(shí)間片(time slice)期滿時(shí),以及根據(jù)處理內(nèi)容而變?yōu)榇龣C(jī)狀態(tài)時(shí)等,處理器16a、…、16η將處理對(duì)象切換成其它線程。此外,在之后的說明中,為方便理解,有時(shí)將處理的主體稱作“線程”,但從硬件意義上講,是指“對(duì)線程進(jìn)行處理的處
理器”。決定線程處理的順序及CPU時(shí)間的分配的調(diào)度(scheduling)可由OS提供的調(diào)度器執(zhí)行,也可以由用戶級(jí)的調(diào)度器執(zhí)行。這樣的調(diào)度處理也作為一個(gè)線程,由處理器16a、...、16n中的一者執(zhí)行。在本實(shí)施方式中,如后述的那樣存在兩種情況根據(jù)隊(duì)列的狀態(tài),處理中的線程釋放處理器并轉(zhuǎn)為待機(jī)狀態(tài)的情況,和通過其它線程的處理,已成為待機(jī)狀態(tài)的線程變得能開始進(jìn)行處理的情況。因此,在這樣的情況下預(yù)先準(zhǔn)備實(shí)現(xiàn)線程的狀態(tài)轉(zhuǎn)移的處理,使得能夠按照來自線程的請(qǐng)求而執(zhí)行。這樣的處理可以由OS提供,也可由用戶級(jí)來準(zhǔn)備。共有存儲(chǔ)器14包括隊(duì)列22。隊(duì)列22是存儲(chǔ)數(shù)據(jù)、線程等的等待隊(duì)列的存儲(chǔ)區(qū)域。如后面詳述的那樣,可根據(jù)等待隊(duì)列的目的而設(shè)置多個(gè)隊(duì)列,但在此,將它們統(tǒng)括為隊(duì)列22。圖2示意性地表示了本實(shí)施方式中存儲(chǔ)于隊(duì)列22中的等待隊(duì)列的數(shù)據(jù)結(jié)構(gòu)例。圖2表示的等待隊(duì)列的目的沒有特別限定,只要是線程處理的過程中所需要的等待隊(duì)列即可,等待的主體可以是線程本身,也可以是線程處理所需要的數(shù)據(jù)。例如考慮如下情況,即,某線程產(chǎn)生事件,將該事件的識(shí)別信息存儲(chǔ)于隊(duì)列22中,其它線程將該識(shí)別信息按照存儲(chǔ)于隊(duì)列22中的順序讀出,并基于此處理事件。此時(shí),隊(duì)列22中形成等待處理的事件的識(shí)別信息的等待隊(duì)列。如圖2所示,本實(shí)施方式的等待隊(duì)列具有鏈接列表的形態(tài)。鏈接列表具有將多個(gè)數(shù)據(jù)通過指向下一數(shù)據(jù)的地址的指針而連結(jié)的構(gòu)造。本實(shí)施方式中的鏈接列表28表示等待隊(duì)列,故鏈接的順序就成為被存儲(chǔ)于隊(duì)列22中的順序。如上所述根據(jù)目的的不同,等待隊(duì)列的主體可以有多種,在此,將它們統(tǒng)稱為“元素”。在圖2中,Ea、Eb、Ec表示按照此順序存儲(chǔ)的元素,Ph、Pa、Pb、Pt表示指針,由各指針延伸出的箭頭所指的元素為存儲(chǔ)于指針?biāo)镜牡刂分械脑?。首先,指針Ph為頭指針,表示第一個(gè)保存的元素Ea的存儲(chǔ)位置地址。與元素Ea對(duì)應(yīng)的指針Pa表示第二個(gè)被存儲(chǔ)的元素Eb的存儲(chǔ)位置地址。與元素Eb對(duì)應(yīng)的指針Pb表示第三個(gè)被存儲(chǔ)的元素Ec的存儲(chǔ)位置地址。指針Pt為尾指針,如果如圖所示最后被存儲(chǔ)的元素為元素Ec,則指針Pt表示該元素Ec的存儲(chǔ)位置地址。 通過這樣的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)任何數(shù)量的元素都可以表示出元素與其存儲(chǔ)順序。按FIFO (First In,F(xiàn)irst Out :先進(jìn)先出)原則將元素從等待隊(duì)列中排除時(shí)(以下稱為“移除”),首先參照頭指針Ph,取得等待隊(duì)列中最先存儲(chǔ)的元素Ea的地址。然后,在將元素Ea從該地址讀出后,將頭指針Ph更新為下一個(gè)元素Eb的存儲(chǔ)位置地址。具體來說,將與元素Ea對(duì)應(yīng)的指針Pa的值復(fù)制到頭指針Ph中。將元素追加于等待隊(duì)列中時(shí)(以下統(tǒng)稱“推入”),在將該元素存儲(chǔ)于隊(duì)列22的空區(qū)域中后,參照尾指針Pt,取得等待隊(duì)列中最后的元素Ec的地址。然后,使表示追加的元素的地址的新指針與該元素Ec建立對(duì)應(yīng),并將尾指針Pt也更新為元素Ec的地址。無論是否使用鏈接列表,操作隊(duì)列等多個(gè)線程所共享的信息時(shí),一般為確保信息的匹配性而需要訪問的排他控制。在該情況下,直到一個(gè)線程完成獲得鎖定(lock)、操作隊(duì)列、解除鎖定這一系列處理,其它線程即使優(yōu)先度高也須等待隊(duì)列的操作。為縮短如上那樣發(fā)生的對(duì)隊(duì)列的訪問等待時(shí)間,本實(shí)施方式將實(shí)現(xiàn)無鎖定地進(jìn)行操作的非阻塞(non-blocking)隊(duì)列。具體來說,以多個(gè)原子操作(Atomic Operation)(不可分操作)階段性地進(jìn)行對(duì)隊(duì)列的一系列操作,在原子操作之間允許插入其它線程的隊(duì)列操作。原子操作是被保證不受其它線程干渉地執(zhí)行的操作。然后,因插入而被中斷了的操作中的剩余部分再接著所插入的線程而繼續(xù)完成。圖3 6是用于詳細(xì)說明本實(shí)施方式的非阻塞隊(duì)列的操作方法的圖。圖3表示向無元素狀態(tài)的隊(duì)列中推入元素Ea的操作方式。假設(shè)從該圖中上方起,隊(duì)列狀態(tài)按狀態(tài)50、52、54、56的順序發(fā)生變化?;镜娘@示方法與圖2的鏈接列表28 —樣,僅用箭頭表示了頭指針Ph、尾指針Pt以外的指針。即,箭頭的起點(diǎn)為與各指針相對(duì)應(yīng)的元素、箭頭的終點(diǎn)為存儲(chǔ)于指針?biāo)镜牡刂分械脑?。圖4 6也是一樣。首先,狀態(tài)50表示隊(duì)列中沒有元素的初始狀態(tài)。此時(shí),將虛設(shè)的元素E—dummy推入鏈接列表中。虛設(shè)的元素E—du_y并不是有效元素,將其事先放入預(yù)定的地址。如此,將虛設(shè)的元素E—du_y放入隊(duì)列中時(shí),將表示元素是虛設(shè)的元素E—du_y的信息附加于表示該元素的指針中,在該圖的示例中附加于頭指針Ph。對(duì)指針附加其它信息的方法與后面參照?qǐng)D12詳述的方法相同?;蛘撸部梢酝ㄟ^在指針?biāo)甘镜牡刂分斜4姹硎驹貫樘撛O(shè)的元素的識(shí)別信息,從而識(shí)別虛設(shè)的元素E—dummy。在狀態(tài)50下,頭指針Ph及尾指針Pt都表示了虛設(shè)的元素E—dummy的地址。當(dāng)從該狀態(tài)起某線程要推入元素Ea時(shí),首先將元素Ea存儲(chǔ)于空著的存儲(chǔ)區(qū)域。然后,將表示該存儲(chǔ)區(qū)域的地址的指針與虛設(shè)的元素E—dummy建立對(duì)應(yīng),由此成為狀態(tài)52 (第I操作)。其次,將尾指針Pt更新,使其表示存儲(chǔ)元素Ea的存儲(chǔ)區(qū)域的地址,成為狀態(tài)54(第2操作)。接著,通過將頭指針Ph更新為與在第I操 作中與虛設(shè)的元素E—dummy建立了對(duì)應(yīng)的指針的值,成為頭指針Ph表示元素Ea的地址的狀態(tài)56 (第3操作)。通過以上步驟,向隊(duì)列中推入第一個(gè)元素的處理完成。在本實(shí)施方式中,像這樣分階段地更新指針。并且,將第I操作、第2操作、第3操作分別作為原子操作。圖4表示向存有元素Ea、Eb的隊(duì)列中推入新元素Ec的操作方式。首先,在狀態(tài)60下,頭指針Ph表示最初保存的元素Ea的地址,與元素Ea相對(duì)應(yīng)的指針以及尾指針表示在元素Ea之后被保存、且是最后被保存的元素Eb的地址。從狀態(tài)60起某線程要推入元素Ec時(shí),首先將元素Ec保存在空著的存儲(chǔ)區(qū)域中。然后,使表示該存儲(chǔ)區(qū)域的地址的指針與元素Eb建立對(duì)應(yīng),從而成為狀態(tài)62 (第I操作)。其次,將尾指針Pt更新,使其表示存有元素Ec的存儲(chǔ)區(qū)域的地址,成為狀態(tài)64(第2操作)。通過以上步驟,向原本存有元素的隊(duì)列中推入新元素的處理完成。此時(shí),指針的更新也是階段性地實(shí)施的,并使第I操作、第2操作為原子操作。圖5表示從存有多個(gè)元素Ea、Eb的狀態(tài)的隊(duì)列中移除元素Ea的操作方式。狀態(tài)70與圖4的狀態(tài)60 —樣。當(dāng)從該狀態(tài)70起某線程要移除第一個(gè)被存儲(chǔ)的元素Ea時(shí),首先參照頭指針Ph取得元素Ea的地址,將該地址中存有的元素Ea讀出到本地存儲(chǔ)器18a等。然后,將頭指針Ph更新為與所讀出的元素Ea相對(duì)應(yīng)的指針的值,成為狀態(tài)72 (第I操作)。通過以上步驟,從存有多個(gè)元素的隊(duì)列中移除第一個(gè)被保存的元素的處理完成。將此時(shí)的對(duì)隊(duì)列的操作、即第I操作作為原子操作。圖6表示從僅存有元素Ea的狀態(tài)的隊(duì)列中移除該元素的操作方式。首先,在狀態(tài)80下,頭指針Ph以及尾指針Pt表示了唯一的元素Ea的地址。當(dāng)從該狀態(tài)起某線程要移除元素Ea的情況下,由于頭指針Ph與尾指針Pt表示了同一個(gè)地址,故判斷為元素Ea是隊(duì)列中最后一個(gè)元素、且隊(duì)列中不包含虛設(shè)的元素E—dummy后,首先將虛設(shè)的元素E—dummy存儲(chǔ)于預(yù)定的存儲(chǔ)區(qū)域中等,對(duì)虛設(shè)的元素E—dummy進(jìn)行必要的初始化,成為狀態(tài)82 (第I操作)。然后,將表示虛設(shè)的元素E—dummy的地址的指針與元素Ea建立對(duì)應(yīng),由此成為狀態(tài)84 (第2操作)。其次,將尾指針Pt進(jìn)行更新,使其表示虛設(shè)的元素E—dummy的地址,成為狀態(tài)86 (第3操作)。其次,參照頭指針Ph取得元素Ea的地址,將頭指針Ph更新為與元素Ea相對(duì)應(yīng)的指針的值、即元素E—dummy的地址,由此成為狀態(tài)88 (第4操作)。此時(shí),事先將元素Ea讀出到本地存儲(chǔ)器18a等中。通過以上步驟,從隊(duì)列中移除最后一個(gè)元素的處理完成。與之前一樣,將第I操作、第2操作、第3操作、第4操作分別作為原子操作。通過圖3 6中分別表示的一系列操作,可實(shí)現(xiàn)所有對(duì)隊(duì)列的操作。在此,由于隊(duì)列沒有被鎖定,故在原子操作之間的期間、即在圖3的狀態(tài)52、54、圖4的狀態(tài)60、圖6的狀態(tài)82、84、86下,有可能發(fā)生其它線程進(jìn)行的隊(duì)列操作的插入。此時(shí),在某條件下,所插入的線程在開始自己的目的操作之前,繼續(xù)進(jìn)行被其它線程中斷的操作中所剩余的操作。接下來說明用于實(shí)現(xiàn)隊(duì)列操作的繼續(xù)的線程動(dòng)作。圖7是表示線程操作隊(duì)列的步驟的流程圖。在圖7 11、圖15、16所示的流程圖中,用S (Step的首字母)和數(shù)字的組合表示各部分的處理步驟。此外,當(dāng)在S和數(shù)字的組合所表示的處理中執(zhí)行某判斷處理,其判斷結(jié)果為肯定時(shí),附加Y (Yes的首字母),例如表示為“S10的Y”。與此相反,其判斷結(jié)果為否定時(shí),附加N (No的首字母),表示為“S10的N”。圖7的流程圖中的處理在某線程訪問隊(duì)列時(shí)開始。首先,線程以元素的移除或推入為目的訪問隊(duì)列(S10)。之后,嘗試進(jìn)行圖3 6的某一操作。例如要推入元素時(shí),如果當(dāng)前狀態(tài)為圖3的狀態(tài)50或圖4的狀態(tài)60,則可以進(jìn)行操作;在要移除元素時(shí),若狀態(tài)為圖5的狀態(tài)70或圖6的狀態(tài)80,則操作可以進(jìn)行。此時(shí)(S12的Y),執(zhí)行該線程本來目的的操作(S16)。即使不處于狀態(tài)50、60、70、80,只要可能,就進(jìn)行操作。例如考慮如圖6的狀態(tài)84那樣尾指針Pt沒有表示最后的元素的地址的情況。即使在這種狀態(tài)下,元素的移除仍然可以實(shí)現(xiàn)。因?yàn)椋氐囊瞥粎⒄疹^指針Ph所示的地址就可執(zhí)行。另一方面,如圖4中說明的那樣,元素的推入需要執(zhí)行第一操作,將尾指針Pt所示的最末尾的元素與表示要推入的元素的地址的新指針相對(duì)應(yīng)。因此,當(dāng)如狀態(tài)84那樣尾指針Pt表示最末尾的元素以外的地址時(shí),該元素立刻就被與指向其它元素的指針建立對(duì)應(yīng),因此無法執(zhí)行第I操作。
·元素的地址時(shí),從尾指針Pt所示的元素起循著鏈接確定最末尾的元素,用其地址來更新尾指針Pt。將阻礙本來操作的非法狀態(tài)的變化(variation)與針對(duì)各狀態(tài)應(yīng)在S14中執(zhí)行的操作事先建立對(duì)應(yīng)地存入共有存儲(chǔ)器14,根據(jù)需要進(jìn)行參照。然后,再次嘗試執(zhí)行本來目的的操作(S12)。如果無法執(zhí)行操作,則再執(zhí)行與此時(shí)的非法狀態(tài)對(duì)應(yīng)的操作(S12的N、S14)。反復(fù)進(jìn)行這些處理,直至本來目的的操作能夠執(zhí)行,由此,實(shí)質(zhì)上之前的線程就能繼續(xù)進(jìn)行剩余的操作了。在此基礎(chǔ)上,執(zhí)行本來的操作(S12 的 Y、S16)。此外,其它線程在圖6的第3操作結(jié)束后的狀態(tài)86下以元素的移除為目的進(jìn)行了插入時(shí),之前的線程的剩余操作、即元素Ea的移除與進(jìn)行了插入的線程的目的操作一致,故作為當(dāng)前線程的本來操作而執(zhí)行。此時(shí),被插入的線程在下次訪問隊(duì)列時(shí),從用于移除元素的最初的操作、即圖6的第I操作開始實(shí)施。此時(shí),如果隊(duì)列中只有虛設(shè)的元素E—du_y,則作為錯(cuò)誤而結(jié)束操作。如上所述,在本實(shí)施方式中,不對(duì)隊(duì)列進(jìn)行鎖定,而是以多個(gè)原子操作階段性地實(shí)施一系列操作。由此,線程等待訪問隊(duì)列的狀態(tài)不會(huì)再發(fā)生,信息處理裝置整體的處理效率得到提升。此外,插入了隊(duì)列訪問的線程通過繼續(xù)進(jìn)行之前線程所進(jìn)行的操作中的剩余操作,即便因插入而導(dǎo)致隊(duì)列暫時(shí)出現(xiàn)非法狀態(tài),也能每次都修正,保持隊(duì)列的一貫性。下面,利用前述的非阻塞隊(duì)列說明使處理效率得到進(jìn)一步提升的各種方案。( I)考慮了等待數(shù)據(jù)的線程的隊(duì)列在存儲(chǔ)于隊(duì)列中的數(shù)據(jù)全部已讀出的情況等時(shí),有時(shí)盡管某線程以數(shù)據(jù)的移除為目的訪問隊(duì)列,但隊(duì)列中卻不存在數(shù)據(jù)。在這樣的情況下,一般會(huì)成為忙循環(huán)狀態(tài)直到有數(shù)據(jù)被存儲(chǔ)于隊(duì)列中,這會(huì)無用地消耗CPU資源。在本實(shí)施方式中,作為上述非阻塞隊(duì)列的說明中的“元素”,將用于線程的處理的“數(shù)據(jù)”與線程的識(shí)別信息等“線程信息”混入一個(gè)隊(duì)列中,由此使無數(shù)據(jù)存在和線程的等待狀態(tài)直接相連,來提高處理效率。此時(shí),信息處理裝置的構(gòu)成可以與圖I中說明的構(gòu)成一樣。此外,由于需要利用非阻塞隊(duì)列,故針對(duì)隊(duì)列的操作可以與圖3 7中說明的操作相同。圖8及圖9是表示考慮到隊(duì)列中沒有要移除的數(shù)據(jù)時(shí)的基本的處理步驟的流程圖。圖8是想要移除數(shù)據(jù)時(shí)的流程圖,此處理在線程以移除數(shù)據(jù)為目的訪問隊(duì)列時(shí)開始執(zhí)行。線程首先確認(rèn)所訪問的隊(duì)列中是否有可以移除的數(shù)據(jù),如果有,則移除該數(shù)據(jù)(S22的Y、S24)。如果沒有數(shù)據(jù),則線程向該隊(duì)列中推入包含本線程的識(shí)別信息的線程信息后,釋放處理器,轉(zhuǎn)為待機(jī)狀態(tài)(S22的N、S28、S30)。即,在沒有移除的數(shù)據(jù)的情況下,線程將對(duì)隊(duì)列的操作切換為線程信息的推入后,轉(zhuǎn)為待機(jī)狀態(tài)。此時(shí),線程信息就被保存在隊(duì)列中。此時(shí),可以向表示所推入的線程信息的頭指針附加表示存儲(chǔ)有線程信息的信息。此外,在S22中,若隊(duì)列中僅存有虛設(shè)的元素或線程信息,則判斷為該隊(duì)列中沒有數(shù)據(jù)(S22的N)。圖9是想要推入數(shù)據(jù)時(shí)的流程圖,該處理在線程以推入數(shù)據(jù)為目的訪問隊(duì)列時(shí)開 始執(zhí)行。此時(shí),線程首先確認(rèn)所訪問的隊(duì)列中是否有線程信息,如果沒有,則就此推入數(shù)據(jù),實(shí)現(xiàn)目的(S32的Y、S34)。反之,如果有線程信息,則判斷為有正在等待數(shù)據(jù)的線程,將該線程信息移除后,向基于此所確定的線程直接傳遞數(shù)據(jù)(S32的N、S36、S38)。在加入了線程信息時(shí)將表示存有線程信息的信息附加于頭指針的方案中,通過參照頭指針來進(jìn)行S32的判斷。S38的處理實(shí)際上是試圖推入數(shù)據(jù)的線程在將該數(shù)據(jù)保存到被分配給要傳遞數(shù)據(jù)的線程的共有存儲(chǔ)器14的區(qū)域中后,向使線程處理開始的處理傳遞所移除的線程信息,由此來使該線程的處理重新開始的。如此,在推入數(shù)據(jù)時(shí)也是一樣,若隊(duì)列中存有線程信息,則將操作切換為該線程信息的移除。通過這樣的處理,能在一個(gè)隊(duì)列中同時(shí)管理數(shù)據(jù)的等待隊(duì)列和線程的等待隊(duì)列。使數(shù)據(jù)的不存在與線程的待機(jī)狀態(tài)直接相連,能原子地操作雙方,因此能縮短用于管理的處理所需的時(shí)間。此外,在沒有數(shù)據(jù)的情況下,線程能夠不變?yōu)槊ρh(huán)狀態(tài)地立即釋放處理器,故信息處理裝置整體的處理效率得到提升。圖8、9是向線程處理所需的數(shù)據(jù)的隊(duì)列中推入線程的等待隊(duì)列的處理步驟,但該方法也適用于數(shù)據(jù)隊(duì)列以外的處理。例如,可以對(duì)將數(shù)據(jù)推入隊(duì)列時(shí)所需的空包隊(duì)列執(zhí)行同樣的操作。這里,包是將存儲(chǔ)數(shù)據(jù)的預(yù)定單位的存儲(chǔ)區(qū)域?qū)嶓w化為數(shù)據(jù)的存放器的結(jié)構(gòu),通過事先規(guī)定可以使用的包數(shù),能限制共有存儲(chǔ)器中可為隊(duì)列使用的區(qū)域。包的概念已經(jīng)被廣泛地引入介由網(wǎng)絡(luò)的通信等領(lǐng)域中。圖10、11是表示將線程的等待隊(duì)列編入數(shù)據(jù)隊(duì)列與空包隊(duì)列這兩者時(shí)的處理步驟的流程圖。此時(shí),作為空包的隊(duì)列,設(shè)有用于保存數(shù)據(jù)的數(shù)據(jù)用空包隊(duì)列和用于保存線程信息的線程信息用空包隊(duì)列。這些隊(duì)列都由非阻塞隊(duì)列構(gòu)成。數(shù)據(jù)用空包隊(duì)列、線程信息用空包隊(duì)列是表示在被劃分為包的共有存儲(chǔ)器的各區(qū)域中的、讀出前的未存儲(chǔ)有數(shù)據(jù)或線程信息的區(qū)域、即空包的地址的隊(duì)列。與此不同,數(shù)據(jù)隊(duì)列是表示讀出前的存儲(chǔ)有數(shù)據(jù)或線程信息的區(qū)域的地址的隊(duì)列。如,從數(shù)據(jù)用空包隊(duì)列移除數(shù)據(jù)用空包、向該包中放入數(shù)據(jù)的一系列處理實(shí)際上為取得從數(shù)據(jù)用空包隊(duì)列連結(jié)空的存儲(chǔ)區(qū)域的指針并寫入新數(shù)據(jù),將該區(qū)域的指針放入數(shù)據(jù)隊(duì)列的處理。反之,從數(shù)據(jù)隊(duì)列移除數(shù)據(jù),將不需要的空包推入數(shù)據(jù)用空包隊(duì)列等一系列處理實(shí)際上為數(shù)據(jù)隊(duì)列的指針將顯示區(qū)域的數(shù)據(jù)讀出,將與該區(qū)域相對(duì)應(yīng)的指針推入數(shù)據(jù)用空包隊(duì)列的處理。此處理方法同樣適用于線程信息。圖10是表示想要從隊(duì)列移除數(shù)據(jù)時(shí)的處理步驟的流程圖,該處理在線程處理中需要移除數(shù)據(jù)時(shí)開始執(zhí)行。首先,線程從線程信息用空包隊(duì)列中確保線程信息用空包(S40)。然后訪問數(shù)據(jù)隊(duì)列,執(zhí)行移除處理(S42)。此時(shí)如圖8中說明的那樣,如果有能移除的數(shù)據(jù),則將數(shù)據(jù)移除,如果沒有,則推入線程信息。在推入線程信息時(shí),向步驟S40所獲得的線程信息用空包中存儲(chǔ)線程信息后,將該信息存入數(shù)據(jù)隊(duì)列。在步驟S42中若無法移除數(shù)據(jù)地推入了線程信息,則該線程成為待機(jī)狀態(tài),因此暫且結(jié)束數(shù)據(jù)的移除處理(S44的N)。反之,若能夠移除數(shù)據(jù)(S44的Y),則將不再需要的線程信息用空包返還給線程信息用空包隊(duì)列(S46)。此處理實(shí)際上成為向線程信息用空包隊(duì)列的推入。為返還存有移除后向本地存儲(chǔ)器中讀入完畢的數(shù)據(jù)的數(shù)據(jù)用空包,訪問數(shù)據(jù)用空包隊(duì)列,進(jìn)行推入處理(S48)。此處理可通過將圖9的流程圖中的“數(shù)據(jù)”置換為“數(shù)據(jù)用空·包”而以相同的處理步驟實(shí)現(xiàn)。即,如果數(shù)據(jù)用空包隊(duì)列中存在線程信息,則移除該信息,并直接向該線程傳遞數(shù)據(jù)用空包,如果數(shù)據(jù)用空包隊(duì)列中不存在線程信息,則推入數(shù)據(jù)用空包。圖11是表示想要向隊(duì)列中推入數(shù)據(jù)時(shí)的處理步驟的流程圖,此處理在線程處理中需要推入數(shù)據(jù)時(shí)開始執(zhí)行。首先,線程從線程信息用空包隊(duì)列中確保線程信息用空包(S50)。然后訪問數(shù)據(jù)用空包隊(duì)列,執(zhí)行數(shù)據(jù)用空包的移除處理(S52)。此處理可通過將圖8的流程圖中的“數(shù)據(jù)”置換為“數(shù)據(jù)用空包”,以相同的處理步驟實(shí)現(xiàn)。即,如果有數(shù)據(jù)用空包,則移除它,如果沒有,則推入線程信息。在推入線程信息時(shí),向在步驟S50中確保的線程信息用空包中存入線程信息后,再存入數(shù)據(jù)用空包隊(duì)列。若在步驟S52中無法移除數(shù)據(jù)用空包地推入了線程信息,則該線程變?yōu)榇龣C(jī)狀態(tài),因此暫時(shí)結(jié)束數(shù)據(jù)的推入處理(S54的N)。反之,若能移除數(shù)據(jù)用空包(S54的Y),則將變得不再需要的線程信息用空包返還于線程信息用空包隊(duì)列(S56)。此處理實(shí)際上成為向線程信息用空包隊(duì)列的推入。進(jìn)而,訪問數(shù)據(jù)隊(duì)列,使用在S52中移除的數(shù)據(jù)用空包進(jìn)行數(shù)據(jù)的推入處理(S58)。此時(shí),如圖9中說明的那樣,如果數(shù)據(jù)用空包隊(duì)列中存在線程信息,則將之移除,并直接將數(shù)據(jù)傳遞給該線程,如果數(shù)據(jù)用空包隊(duì)列中不存在線程信息,則推入數(shù)據(jù)。通過上述構(gòu)成,不僅對(duì)于線程處理所需的數(shù)據(jù)的移除、推入,在其前后的處理所需要的空包的確保、返還的處理中,線程也不會(huì)因隊(duì)列的訪問等待而成為忙循環(huán)狀態(tài),而是能釋放處理器。因各隊(duì)列是非阻塞隊(duì)列,故可在空包獲得處理和數(shù)據(jù)讀出處理這兩者中減少因等待訪問隊(duì)列而產(chǎn)生的線程等待時(shí)間。(2)信號(hào)量信號(hào)量作為針對(duì)多個(gè)線程共同使用的資源進(jìn)行資源使用的同步的方法而被廣泛利用。具體來講,是在共有存儲(chǔ)器中準(zhǔn)備表示可利用的資源數(shù)的計(jì)數(shù)器,在要使用資源時(shí),使計(jì)數(shù)器的值減少所要使用的數(shù)量,在使用完資源而釋放資源時(shí),使計(jì)數(shù)器的值增加相應(yīng)數(shù)量。例如在將對(duì)器件和存儲(chǔ)器等的訪問權(quán)作為資源時(shí),將能同時(shí)訪問的線程數(shù)的上限作為計(jì)數(shù)器的初始值,如將計(jì)數(shù)器的值限制為整數(shù),則當(dāng)訪問數(shù)達(dá)到上限時(shí)計(jì)數(shù)器變?yōu)?,無法進(jìn)行更多的訪問。在此,利用非阻塞隊(duì)列的構(gòu)成說明高效地實(shí)現(xiàn)信號(hào)量的功能的方法。圖12示意性地表示了為實(shí)現(xiàn)信號(hào)量的功能而存儲(chǔ)于隊(duì)列22中的鏈接列表的構(gòu)造及其操作的方式。鏈接列表的構(gòu)造和對(duì)隊(duì)列的基本操作與之前說明的一樣,但在實(shí)現(xiàn)信號(hào)量時(shí),對(duì)鏈接列表的指針附加關(guān)于資源數(shù)的信息。在該圖中,狀態(tài)90的頭指針Ph被附加了表示當(dāng)前可使用的資源數(shù)的計(jì)數(shù)器值Nr。當(dāng)任何一個(gè)線程都沒有使用該資源時(shí),計(jì)數(shù)器值Nr為事先設(shè)定的上限值。在本實(shí)施方式中,如下述那樣對(duì)信號(hào)量的機(jī)構(gòu)編入用于獲得資源的線程的等待隊(duì)列。因此,計(jì)數(shù)器值Nr不限定于整數(shù),資源數(shù)不足時(shí)以負(fù)值表示。所請(qǐng)求的資源數(shù)也以負(fù)值表示。
在從狀態(tài)90起某線程請(qǐng)求資源時(shí),首先參照頭指針Ph,取得附加于該指針的計(jì)數(shù)器值Nr。然后,如果資源的請(qǐng)求數(shù)在計(jì)數(shù)器值Nr以下,則可獲得所請(qǐng)求數(shù)量的資源,故從原來的計(jì)數(shù)器值Nr減去請(qǐng)求數(shù),更新計(jì)數(shù)器值(該圖中表示為“Nr’”)。通過該第I操作,成為狀態(tài)92,資源數(shù)滿足請(qǐng)求數(shù)時(shí)的資源獲取完成。此處的第I操作也作為原子操作。因此,將計(jì)數(shù)器值Nr與指針加起來作為可進(jìn)行原子操作的數(shù)據(jù)大小。例如若能實(shí)施原子操作的數(shù)據(jù)大小為4字節(jié)單位,則將3字節(jié)分配給指針,將I字節(jié)分配給計(jì)數(shù)器值Nr。在數(shù)據(jù)大小不足的情況下,例如將指針作為目錄構(gòu)造進(jìn)行鏈接列表的操作時(shí),僅操作指針的目錄,可以只在需要數(shù)據(jù)訪問時(shí)抽取實(shí)際的地址。此夕卜,在從狀態(tài)90起某線程釋放資源時(shí),只要將釋放的資源數(shù)加入到計(jì)數(shù)器值Nr中進(jìn)行更新即可。圖13表示資源不足請(qǐng)求數(shù)時(shí)的鏈接列表的操作方式。在此,為了方便理解,將計(jì)數(shù)器值和請(qǐng)求數(shù)用具體的數(shù)值例表示。首先,在狀態(tài)100中,被附加于頭指針Ph的計(jì)數(shù)器值Nr為“5”,表示可以利用5個(gè)資源。假設(shè)從該狀態(tài)100起某線程請(qǐng)求10個(gè)資源。此時(shí),該線程參照附加于頭指針Ph的計(jì)數(shù)器值“5”,判斷為資源數(shù)比請(qǐng)求數(shù)小后,開始向隊(duì)列推入自己的線程信息的操作。此時(shí),首先將線程信息存于空著的存儲(chǔ)區(qū)域。然后,將資源請(qǐng)求數(shù)以負(fù)值附加于表示該存儲(chǔ)區(qū)域的地址的指針,并通過與虛設(shè)的元素Edummy建立對(duì)應(yīng),成為狀態(tài)102 (第I操作)。在狀態(tài)102等中,表示頭指針Ph、尾指針Pt以外的指針的箭頭上所示的數(shù)值為該指針?biāo)桓郊拥馁Y源請(qǐng)求數(shù)。在此例中,請(qǐng)求資源數(shù)為10,因此,“一10”被附加于指針。如此,將附加于頭指針Ph以外的指針中的信息作為該指針?biāo)镜摹⑾乱痪€程請(qǐng)求的資源數(shù)。然后,將尾指針Pt更新,使其表示所推入的線程信息的地址,成為狀態(tài)104 (第2操作)。其次,通過將頭指針Ph更新為與虛設(shè)的元素E—du_y相對(duì)應(yīng)的指針的值,成為頭指針Ph表示線程信息的地址的狀態(tài)。此時(shí),同時(shí)在頭指針Ph所被附加的計(jì)數(shù)器值中加入與虛設(shè)元素E—dummy相對(duì)應(yīng)的指針?biāo)桓郊拥馁Y源的請(qǐng)求數(shù),將其結(jié)果附加于更新后的頭指針Ph。在該圖中,5 — 10 =一 5被附加于頭指針Ph。通過以上的第3操作,變?yōu)闋顟B(tài)106。如此,被附加于頭指針Ph的計(jì)數(shù)器值Nr為負(fù)值時(shí)表示資源的不足數(shù)。此時(shí),形成正在等待獲得資源的線程的等待隊(duì)列。在從狀態(tài)106起有其它線程請(qǐng)求資源時(shí),推入其線程信息,并對(duì)表示所追加的線程信息的指針附加該線程的資源請(qǐng)求數(shù)。此外,與此前一樣,第I操作、第2操作、第3操作分別原子地執(zhí)行。圖14表示有正在等待獲得資源的線程的情況下,釋放資源時(shí)的鏈接列表的操作方式。在該圖中,在狀態(tài)108下有2個(gè)線程正在等待獲得資源,其各自的線程信息、即線程信息a、線程信息b按照此順序被存儲(chǔ)于隊(duì)列中。相對(duì)于等待隊(duì)列的最初的線程所請(qǐng)求的資源數(shù)不足的部分由頭指針Ph所被附加的計(jì)數(shù)器值表示,在該情況下表示為“一 5”。與線程信息b對(duì)應(yīng)的等待隊(duì)列的下一線程的資源請(qǐng)求數(shù)被附加于與線程信息a相對(duì)應(yīng)的指針。該圖中附加了 “一 2”。假設(shè)針對(duì)該狀態(tài)108,某線程公開資源數(shù)6。此時(shí),該線程首先參照被附加于頭指針Ph的計(jì)數(shù)器值,由于該值為負(fù)值,故判斷為有等待獲得資源的線程。然后,使該計(jì)數(shù)器值與釋放的資源數(shù)相加,作為新的計(jì)數(shù)器值。如果該值在O以上,則等待隊(duì)列的最初的線程能獲得所請(qǐng)求的資源數(shù),故通過將對(duì)應(yīng)的線程信息a移除而將之從等待隊(duì)列中排除。在該例中,釋放的資源數(shù)為“6”,計(jì)數(shù)器值為“一 5”,新的計(jì)數(shù)器值成為“ I ”,故移除線程信息a。
此時(shí),將頭指針Ph更新為與所移除的線程信息a相對(duì)應(yīng)的指針值,并將附加于該指針的下一線程的資源請(qǐng)求數(shù)再與之前算出的新的計(jì)數(shù)器值相加,將其結(jié)果附加于頭指針Ph。在該圖的例子中,最初的線程獲得資源后的計(jì)數(shù)器值如上所述為“1”,下一線程的請(qǐng)求數(shù)為“一 2”,因此,將I 一 2 =— I的計(jì)數(shù)器值附加于頭指針Ph。通過上述的第I操作,成為線程信息a被移除了的狀態(tài)110。如該例這樣如果計(jì)數(shù)器值為負(fù),則相對(duì)于頭指針Ph所示的線程的資源請(qǐng)求數(shù),可利用的資源不足,因此,更多線程信息在下一次有資源被釋放之前不會(huì)移除。反之,當(dāng)狀態(tài)110中計(jì)數(shù)器值為正時(shí),下一個(gè)等待獲得資源的線程可也獲得所請(qǐng)求的資源,故可繼續(xù)移除線程信息。通過將移除的線程信息提供給開始進(jìn)行線程處理的處理(process),使用所獲得的資源,線程的處理恢復(fù)進(jìn)行。在將等待隊(duì)列中的最后的線程信息移除時(shí),同圖6 —樣推入虛設(shè)的元素。圖15是表示請(qǐng)求資源時(shí)的處理步驟的流程圖。此流程圖中的處理在請(qǐng)求資源的線程訪問隊(duì)列時(shí)開始執(zhí)行。首先,線程參照被附加于頭指針Ph的計(jì)數(shù)器值,判斷相對(duì)于請(qǐng)求數(shù),可利用的資源是否足夠(S60)。如果夠(S60的Y),則通過將計(jì)數(shù)器值減掉請(qǐng)求數(shù)來更新計(jì)數(shù)器值,并獲得請(qǐng)求的資源(S62)??衫玫馁Y源數(shù)不足時(shí)(S60的N),將自己的線程信息推入隊(duì)列(S64)。然后通過將計(jì)數(shù)器值的數(shù)減掉請(qǐng)求數(shù)來更新計(jì)數(shù)器值(S66)。此時(shí)的計(jì)數(shù)器值成為負(fù)值。此后,該線程釋放處理器,轉(zhuǎn)為待機(jī)狀態(tài)(S68 )。圖16是表示釋放資源時(shí)的處理步驟的流程圖。此流程圖中的處理在要釋放資源的線程訪問隊(duì)列時(shí)開始執(zhí)行。首先,線程通過確認(rèn)附加于頭指針Ph的計(jì)數(shù)器值是否為負(fù),來判斷是否有等待獲得資源的線程(S70)。沒有等待獲得資源的線程時(shí)(S70的N),通過將計(jì)數(shù)器值與釋放的資源數(shù)相加來更新計(jì)數(shù)器值,完成釋放處理(S72)。有等待獲得資源的線程時(shí)(S70的Y),判斷釋放的資源數(shù)是否滿足等待隊(duì)列的第一個(gè)線程所請(qǐng)求的資源的不足量(S74)。如上述那樣,若將釋放的資源數(shù)加入原計(jì)數(shù)器值后的新計(jì)數(shù)器值為O以上,則可以判斷為資源數(shù)足夠。釋放的資源數(shù)足夠時(shí)(S74的Y),移除該線程的線程信息,使之從等待隊(duì)列中排除(S76),利用所獲得的資源繼續(xù)進(jìn)行該線程的處理(S78)。等待隊(duì)列中有后續(xù)的線程時(shí)(S70的Y),若釋放的資源的剩余數(shù)滿足其資源請(qǐng)求數(shù)(S74的Y),則依次實(shí)施線程信息的移除和線程處理的再次開始(S76、S78)。若已沒有等待獲得資源的線程(S70的N)、或釋放的資源數(shù)不夠(S74的N),則將此時(shí)的計(jì)數(shù)器值作為該時(shí)點(diǎn)的最終計(jì)數(shù)器值而附加于頭指針Ph,結(jié)束釋放處理(S72 )。通過這樣的構(gòu)成,能夠同時(shí)實(shí)現(xiàn)信號(hào)量的功能與等待獲得資源的線程的隊(duì)列的功能。這些功能可通過針對(duì)同一隊(duì)列的原子操作來實(shí)現(xiàn),因此,資源不足時(shí)可使請(qǐng)求資源的線程立刻成為待機(jī)狀態(tài),釋放處理器。并且,一旦成為可獲得資源的狀態(tài),立刻就能使已成為待機(jī)狀態(tài)的線程的處理再次開始。這些處理被非阻塞地執(zhí)行,因此,可以在對(duì)隊(duì)列的訪問、資源的請(qǐng)求及釋放、線程的待機(jī)及處理再次開始這些各步驟中縮短線程的等待時(shí)間。(3) RW 鎖定作為控制多個(gè)線程訪問存儲(chǔ)于共有存儲(chǔ)器中的數(shù)據(jù)的方法,R (Reader) lock (讀鎖)及W (Writer) lock (寫鎖)。一般來講,在某線程為讀出數(shù)據(jù)而獲得了 Rlock的期間,其它線程也能獲得Rlock,使得多個(gè)線程可同時(shí)進(jìn)行讀取。另一方面,在某線程為寫入數(shù)據(jù)而獲得了 Wlock的期間,其它線程無法訪問該數(shù)據(jù)。通過以上手段,保證數(shù)據(jù)的匹配性。Rlock與Wlock不會(huì)同時(shí)發(fā)生,例如想要進(jìn)行寫入的線程要等待其它線程獲得的·Rlock被解除,在獲得Wlock后再進(jìn)行寫入。想要進(jìn)行讀取的線程在其它線程已經(jīng)獲得了Rlock的情況下,該線程本身也會(huì)立刻獲得Rlock開始讀取。另一方面,若其它線程獲得了Wlock,則要等待其解除,在獲得Rlock后再進(jìn)行讀取。在此,說明利用非阻塞隊(duì)列的結(jié)構(gòu)高效率地實(shí)現(xiàn)RW鎖定的管理的方法。在該情況下,對(duì)于信號(hào)量也同上述一樣,將用于獲得鎖定的線程的等待隊(duì)列編入RW鎖定的管理機(jī)構(gòu)。因此,向鏈接列表的指針附加RW鎖定的信息。在此,RW鎖定的信息包含當(dāng)前的鎖定的狀態(tài)及正等待獲得鎖定的線程所請(qǐng)求的鎖定的種類的信息。所謂當(dāng)前的鎖定的狀態(tài),是指獲得了 Rlock的線程數(shù)和獲得了 Wlock的線程數(shù)。在以下的說明中,以變量R表示前者,以變量W表示后者。如上所述,變量W的最大值為I,變量R沒有上限。此外,變量R取O以外的值時(shí)變量W為0,變量W為I時(shí)變量R為O。鏈接列表的構(gòu)造及其操作方式基本上與說明信號(hào)量時(shí)的一樣。例如,在沒有等待獲得鎖定的線程的狀態(tài)下,以當(dāng)前的鎖定的狀態(tài)代替圖12中的計(jì)數(shù)器值Nr來附加于頭指針Ph。另一方面,有等待獲得鎖定的線程時(shí),頭指針Ph還被附加鏈接列表的第一個(gè)線程所請(qǐng)求的鎖定的種類、即表示是Rlock還是Wlock的信息。在R = 0、w = 0,即任何一個(gè)線程都沒有獲得鎖定的狀態(tài)下,線程可立刻獲得任何一種鎖定。具體來講,線程首先參照頭指針Ph,取得其所被附加的當(dāng)前的鎖定的狀態(tài)。如上述那樣,R = O、W = O時(shí),線程根據(jù)自己請(qǐng)求的鎖定的種類而使變量R或變量W增量,由此獲得Rlock或Wlock。R為O以外的值時(shí),線程若請(qǐng)求Rlock,則也可通過使變量R增量而獲得 Rlock0圖17表示在由其它線程獲得了 Wlock的期間出現(xiàn)請(qǐng)求Rlock的線程時(shí)的鏈接列表的操作方式。在該圖中,為了方便理解,以具體例子表示RW鎖定的信息。首先,在狀態(tài)120下,被附加于頭指針Ph的RW鎖定的信息為“R = O7W= 1”,表示其它線程已經(jīng)獲得了Wlock0請(qǐng)求Rlock的線程首先要參照被附加于頭指針Ph的RW鎖定的信息,確認(rèn)Wlock已被獲得了時(shí),向隊(duì)列推入自己的線程信息。此時(shí),首先將線程信息存入空著的存儲(chǔ)區(qū)域,向表示該存儲(chǔ)區(qū)域的地址的指針附加表示所請(qǐng)求的鎖定的種類的識(shí)別信息,在該圖中,附加“Rlock”,并通過使之與虛設(shè)的元素E—dummy建立對(duì)應(yīng),而成為狀態(tài)122 (第I操作)。然后,將尾指針Pt更新,使其表示該線程信息的地址,成為狀態(tài)124 (第2操作)。接著,將頭指針Ph更新為與虛設(shè)的元素E—dummy相對(duì)應(yīng)的指針的值,由此成為頭指針Ph表示線程信息的地址的狀態(tài)。與此同時(shí),將被附加于與虛設(shè)的元素E—dummy相對(duì)應(yīng)的指針的、表示等待線程所請(qǐng)求的鎖定的種類的識(shí)別信息“Rlock”追加于頭指針Ph的附加信息中。通過這些第3操作,成為狀態(tài)126。結(jié)果,頭指針Ph就被附加了表示當(dāng)前的鎖定的狀態(tài)的信息、和頭指針Ph所示的線程所請(qǐng)求的鎖定的種類。從狀態(tài)126起,其它線程請(qǐng)求了 Rlock或Wlock時(shí),推入其線程信息,并對(duì)表示所追加的線程信息的指針附加該線程所請(qǐng)求的鎖定的種類。此外,于之前一樣,分別原子地實(shí)施第I操作、第2操作、第3操作。因此,如針對(duì)信號(hào)量所說明的那樣,使附加于指針的RW鎖定的信息與指針一起成為可進(jìn)行原子操作的數(shù)據(jù)大小。該圖表示了最初Wlock被獲得的情況,但在最初Rlock被獲得的狀態(tài)下請(qǐng)求Wlock時(shí)也是同樣的操作。
圖18表示獲得了 Wlock的線程解除Wlock時(shí)的鏈接列表的操作方式。在該圖中,在狀態(tài)130下,請(qǐng)求Rlock的線程和請(qǐng)求Wlock的線程按此順序形成了等待隊(duì)列,其各自的線程信息、即線程信息a、線程信息b按此順序被存儲(chǔ)于隊(duì)列中。在此,要解除Wlock的線程首先參照附加于頭指針Ph的RW鎖定的信息,由于其中包含有表示被請(qǐng)求的鎖定的種類的識(shí)別信息,故判斷為有等待獲得鎖定的線程。之后,移除鏈接列表的等待隊(duì)列中的第一個(gè)線程信息a。此時(shí),將頭指針Ph更新為與移除的線程信息a相對(duì)應(yīng)的指針的值,并更新附加于頭指針Ph的RW鎖定的信息。在該圖中,由于是解除Wlock,所以使變量W減量,由于要使與所移除的線程信息a對(duì)應(yīng)的線程獲得Rlock,所以使變量R增量。此外,由于與后續(xù)的線程信息b對(duì)應(yīng)的線程是請(qǐng)求Wlock的,所以在附加于頭指針Ph的RW鎖定的信息中將“Rlock”改寫為“Wlock”。由此,成為狀態(tài) 132。在此,當(dāng)與后續(xù)的線程信息b對(duì)應(yīng)的線程請(qǐng)求Rlock時(shí),能夠接著使其獲得Rlock,因此,將線程信息b也移除。如此,解除自己的鎖定的線程在有其它等待獲得鎖定的線程的情況下,移除等待隊(duì)列的第一個(gè)線程信息,使與該線程信息對(duì)應(yīng)的線程獲得鎖定。如果使之獲得的鎖定是Rlock,則進(jìn)一步確認(rèn)等待隊(duì)列,如果有連續(xù)請(qǐng)求Rlock的線程,則依次移除它們的線程信息,使其獲得Rlock。通過將移除的線程信息提供給使線程處理開始執(zhí)行的處理,已獲得鎖定的線程的處理將再次開始。在移除等待隊(duì)列中的最后的線程信息時(shí),與圖6一樣,推入虛設(shè)的元素。此外,也可以使得解除Wlock的線程僅移除最前面的線程信息a,不確認(rèn)后續(xù)的線程信息。在該情況下,可以如下這樣連鎖地確認(rèn)能否獲得鎖定開始了處理的線程信息a的線程確認(rèn)后續(xù)的線程、即接下來來到等待隊(duì)列的最前面的線程信息b,如果是Rlock,則移除該線程信息b,使對(duì)應(yīng)的線程處理開始執(zhí)行。請(qǐng)求鎖定時(shí)的處理步驟與圖15的流程圖中所示的步驟一樣。但,S60的判斷為判斷是否可獲得所請(qǐng)求的鎖定,在S62及S66中更新的信息為RW鎖定的信息。解除鎖定時(shí)的處理步驟與圖16的流程圖中所示的步驟一樣。但,S74的判斷為判斷是否可獲得所請(qǐng)求的鎖定,在S72中更新的信息為RW鎖定的信息。通過以上這樣的構(gòu)成,可同時(shí)實(shí)現(xiàn)RW鎖定的管理功能與等待獲得鎖定的線程的隊(duì)列的功能。這些功能可通過針對(duì)同一隊(duì)列的原子操作來實(shí)現(xiàn),因此,能使無法獲得鎖定的線程立刻變?yōu)榇龣C(jī)狀態(tài),釋放處理器。此外,當(dāng)成為可獲得鎖定的狀態(tài)時(shí),能立刻使已變?yōu)榇龣C(jī)狀態(tài)的線程的處理再次開始。這些處理被非阻塞地進(jìn)行,因此,能在對(duì)隊(duì)列的訪問、鎖定的獲得及解除、線程的待機(jī)及處理的再次開始這些各步驟中減少線程的等待時(shí)間。以上基于實(shí)施方式對(duì)本發(fā)明進(jìn)行了說明。本領(lǐng)域技術(shù)人員當(dāng)理解上述的實(shí)施方式為例示,其各構(gòu)成要素和各處理過程的組合可以有各種變形例,且該變形例同樣包括在本發(fā)明的范圍內(nèi)。標(biāo)號(hào)說明10信息處理裝置、12a處理單元、14共有存儲(chǔ)器、16a處理器、18a本地存儲(chǔ)器、22隊(duì)列、28鏈接列表。工業(yè)可利用性·
如上,本發(fā)明可用于計(jì)算機(jī)、游戲機(jī)等信息處理裝置。
權(quán)利要求
1.一種信息處理裝置,其特征在于,包括 保存由各個(gè)數(shù)據(jù)的隊(duì)列構(gòu)成的數(shù)據(jù)用隊(duì)列的存儲(chǔ)器,和 對(duì)將所生成的數(shù)據(jù)加入到上述數(shù)據(jù)用隊(duì)列中的數(shù)據(jù)生成線程和將數(shù)據(jù)從上述數(shù)據(jù)用隊(duì)列中取出的數(shù)據(jù)消費(fèi)線程的至少任一者進(jìn)行處理的一個(gè)以上的處理器; 其中,上述處理器 在上述數(shù)據(jù)消費(fèi)線程的處理中,當(dāng)上述數(shù)據(jù)用隊(duì)列中不存在應(yīng)取出的數(shù)據(jù)時(shí),向該數(shù)據(jù)用隊(duì)列中加入上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息, 在上述數(shù)據(jù)生成線程的處理中,在將數(shù)據(jù)加入上述數(shù)據(jù)用隊(duì)列中時(shí),若該數(shù)據(jù)用隊(duì)列中有上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息,則改變數(shù)據(jù)的存儲(chǔ)位置,以使得該數(shù)據(jù)消費(fèi)線程能夠取得它。
2.如權(quán)利要求I所述的信息處理裝置,其特征在于, 上述處理器在上述數(shù)據(jù)消費(fèi)線程的處理中,在將該數(shù)據(jù)消費(fèi)線程的識(shí)別信息加入上述數(shù)據(jù)用隊(duì)列中后,休止該數(shù)據(jù)消費(fèi)線程的處理。
3.如權(quán)利要求2所述的信息處理裝置,其特征在于, 上述處理器在上述數(shù)據(jù)生成線程的處理中,若上述數(shù)據(jù)用隊(duì)列中有上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息,則使已休止的該數(shù)據(jù)消費(fèi)線程的處理轉(zhuǎn)為再次開始的狀態(tài)。
4.如權(quán)利要求I至3的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述處理器按預(yù)先規(guī)定的原子操作的單位階段性地實(shí)施上述數(shù)據(jù)生成線程的處理中的將數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列的操作、和上述數(shù)據(jù)消費(fèi)線程的處理中的從數(shù)據(jù)用隊(duì)列取出數(shù)據(jù)的操作,并且在該原子操作期間以外,即使在將上述數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列的操作或?qū)⑸鲜鰯?shù)據(jù)從數(shù)據(jù)用隊(duì)列中取出的操作的中途,也不阻礙用于其它線程處理的對(duì)數(shù)據(jù)用隊(duì)列的操作。
5.如權(quán)利要求4所述的信息處理裝置,其特征在于, 上述處理器在上述其它線程的處理中,若在上述原子操作期間以外也無法進(jìn)行用于該其它線程處理的對(duì)數(shù)據(jù)用隊(duì)列的操作,則判斷為是將上述數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列的操作或從數(shù)據(jù)用隊(duì)列取出上述數(shù)據(jù)的操作的中途狀態(tài),通過根據(jù)該中途狀態(tài)進(jìn)行所規(guī)定的操作,使將上述數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列的操作或從數(shù)據(jù)用隊(duì)列取出上述數(shù)據(jù)的操作的至少一部分推進(jìn)執(zhí)行。
6.如權(quán)利要求4或5的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述數(shù)據(jù)用隊(duì)列具有將各數(shù)據(jù)用指向隊(duì)列中的下一數(shù)據(jù)的指針連結(jié)的鏈接列表的構(gòu)造,并通過使各指針的更新分別為原子操作,來階段性地實(shí)施將上述數(shù)據(jù)加入數(shù)據(jù)用隊(duì)列的操作和從數(shù)據(jù)用隊(duì)列取出上述數(shù)據(jù)的操作。
7.如權(quán)利要求I至6的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述存儲(chǔ)器還保存由表示空存儲(chǔ)區(qū)域的信息的空包的隊(duì)列構(gòu)成的包用隊(duì)列,該包用隊(duì)列能保存應(yīng)加入上述數(shù)據(jù)用隊(duì)列的預(yù)定單位的數(shù)據(jù); 上述處理器 在上述數(shù)據(jù)生成線程的處理中,在將生成的預(yù)定單位的數(shù)據(jù)加入上述數(shù)據(jù)用隊(duì)列前,嘗試從上述包用隊(duì)列取出空包,如果應(yīng)取出的空包不存在,則向該包用隊(duì)列加入上述數(shù)據(jù)生成線程的識(shí)別信息,在上述數(shù)據(jù)消費(fèi)線程的處理中,在將預(yù)定單位的數(shù)據(jù)從上述數(shù)據(jù)用隊(duì)列取出后,將不再需要的空包返回給上述包用隊(duì)列時(shí),若該包用隊(duì)列中有上述數(shù)據(jù)生成線程的識(shí)別信息,則改變空包的保存位置,以使得該數(shù)據(jù)生成線程能夠取得它。
8.如權(quán)利要求I至5的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述數(shù)據(jù)用隊(duì)列具有將各數(shù)據(jù)用指向隊(duì)列中的下一數(shù)據(jù)的指針連結(jié)的鏈接列表的構(gòu)造; 在上述數(shù)據(jù)用隊(duì)列中,在沒有上述應(yīng)取出的數(shù)據(jù)及上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息任一者的狀態(tài)下,保存虛設(shè)數(shù)據(jù); 指向上述鏈接列表中的上述虛設(shè)數(shù)據(jù)的指針被附加了識(shí)別虛設(shè)數(shù)據(jù)的信息。
9.如權(quán)利要求I至5的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述數(shù)據(jù)用隊(duì)列具有將各數(shù)據(jù)用指向隊(duì)列中的下一數(shù)據(jù)的指針連結(jié)的鏈接列表的構(gòu)造; 上述處理器 在上述數(shù)據(jù)消費(fèi)線程的處理中,在向上述數(shù)據(jù)用隊(duì)列加入上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息時(shí),對(duì)指向上述鏈接列表的該識(shí)別信息的指針附加表示有識(shí)別信息的信息, 在上述數(shù)據(jù)生成線程的處理中,通過參照上述鏈接列表的指針,判斷上述數(shù)據(jù)用隊(duì)列中是否有上述數(shù)據(jù)消費(fèi)線程的識(shí)別信息。
10.一種信息處理方法,其特征在于,包括 在由處理器執(zhí)行的第I線程的處理中,在嘗試從保存于存儲(chǔ)器的隊(duì)列取出數(shù)據(jù)時(shí),若應(yīng)取出的數(shù)據(jù)不存在,則將上述第I線程的識(shí)別信息加入該隊(duì)列的步驟;和 在由處理器執(zhí)行的第2線程的處理中,在向上述隊(duì)列加入數(shù)據(jù)時(shí),若該隊(duì)列中有上述第I線程的識(shí)別信息,則將數(shù)據(jù)提供給該第I線程的步驟。
11.一種計(jì)算機(jī)程序,其特征在于,使計(jì)算機(jī)實(shí)現(xiàn)以下功能 在第I線程的處理中,嘗試從保存于存儲(chǔ)器中的隊(duì)列取出數(shù)據(jù)時(shí),如果應(yīng)取出的數(shù)據(jù)不存在,則將上述第I線程的識(shí)別信息加入該隊(duì)列; 在第2線程的處理中,在向上述隊(duì)列加入數(shù)據(jù)時(shí),若該隊(duì)列中有上述第I線程的識(shí)別信息,則向該第I線程提供數(shù)據(jù)。
12.一種信息處理裝置,其特征在于,包括 處理器,對(duì)訪問需要同步管理的對(duì)象的線程進(jìn)行處理; 存儲(chǔ)器,保存具有鏈接列表構(gòu)造的隊(duì)列,該隊(duì)列表示請(qǐng)求訪問上述對(duì)象的線程的等待隊(duì)列,該鏈接列表將各線程的識(shí)別信息用指向隊(duì)列中的下一線程的識(shí)別信息的指針連結(jié);作為指向上述鏈接列表中的第一個(gè)線程的識(shí)別信息的指針的頭指針被附加了關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信息; 上述線程請(qǐng)求訪問上述對(duì)象時(shí),在參照被附加于上述頭指針的關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信息,判斷可否訪問,若不能訪問,則將上述線程的識(shí)別信息加入上述隊(duì)列。
13.如權(quán)利要求12所述的信息處理裝置,其特征在于, 上述線程在結(jié)束對(duì)上述對(duì)象的訪問時(shí),參照上述鏈接列表中的頭指針?biāo)桓郊拥?、關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信息,判斷請(qǐng)求訪問的線程是否存在于隊(duì)列中,如果存在,則將該線程的識(shí)別信息從隊(duì)列中取出。
14.如權(quán)利要求13所述的信息處理裝置,其特征在于, 上述線程在無法訪問上述對(duì)象時(shí),將該線程的識(shí)別信息加入上述隊(duì)列后,轉(zhuǎn)為休止?fàn)顟B(tài); 其它線程在結(jié)束對(duì)上述對(duì)象的訪問時(shí),如果隊(duì)列中存在請(qǐng)求訪問的線程的識(shí)別信息,則使處于休止?fàn)顟B(tài)的與上述識(shí)別信息對(duì)應(yīng)的線程的處理轉(zhuǎn)為再次開始執(zhí)行的狀態(tài)。
15.如權(quán)利要求12至14的任一項(xiàng)所述的信息處理裝置,其特征在于, 上述鏈接列表中的指針被附加關(guān)于該指針?biāo)赶虻木€程的訪問請(qǐng)求的信息; 上述線程在將請(qǐng)求訪問的線程的識(shí)別信息從隊(duì)列中取出時(shí),將上述頭指針更新,使其指向下一個(gè)線程的識(shí)別信息,并基于取出的識(shí)別信息的指針?biāo)桓郊拥?、關(guān)于上述下一個(gè)線程的上述訪問請(qǐng)求的信息,更新附加于上述頭指針中的關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信肩、O
16.如權(quán)利要求12至15的任一項(xiàng)所述的信息處理裝置,其特征在于, 按預(yù)先規(guī)定的原子操作單位階段性地實(shí)施將線程的識(shí)別信息加入隊(duì)列的操作及從隊(duì)列中取出的操作,在該原子操作期間以外,即使在上述加入隊(duì)列的操作或從上述隊(duì)列取出的操作的中途,也不阻礙其它線程對(duì)隊(duì)列的操作。
17.如權(quán)利要求16所述的信息處理裝置,其特征在于, 上述其它線程在上述原子操作期間以外也無法進(jìn)行對(duì)上述隊(duì)列的操作時(shí),判斷為是向上述隊(duì)列加入的操作或從上述隊(duì)列取出的操作的中途狀態(tài),通過根據(jù)該中途狀態(tài)進(jìn)行所規(guī)定的操作,使向上述隊(duì)列加入的操作或從上述隊(duì)列取出的操作的至少一部分推進(jìn)執(zhí)行。
18.如權(quán)利要求12至17的任一項(xiàng)所述的信息處理裝置,其特征在于, 通過使各指針的更新分別為原子操作,來階段性地實(shí)施將線程的識(shí)別信息加入隊(duì)列的操作及從隊(duì)列取出的操作。
19.如權(quán)利要求15所述的信息處理裝置,其特征在于, 對(duì)上述對(duì)象的訪問是資源的利用; 附加于上述頭指針的、關(guān)于上述當(dāng)前狀態(tài)的信息是該資源的可利用數(shù); 附加于各指針的、關(guān)于上述下一個(gè)線程的訪問請(qǐng)求的信息是資源的請(qǐng)求數(shù)。
20.如權(quán)利要求19所述的信息處理裝置,其特征在于, 上述資源的可利用數(shù)通過取負(fù)值來表示資源的不足數(shù)。
21.如權(quán)利要求15所述的信息處理裝置,其特征在于, 對(duì)上述對(duì)象的訪問是對(duì)存儲(chǔ)于共有存儲(chǔ)器中的數(shù)據(jù)的讀出及寫入; 附加于上述頭指針的上述關(guān)于現(xiàn)在狀態(tài)的信息是正在讀出該數(shù)據(jù)的線程數(shù)及正在寫入該數(shù)據(jù)的線程數(shù); 附加于各指針的、關(guān)于上述下一個(gè)線程的訪問請(qǐng)求的信息是讀出和寫入的區(qū)別。
22.一種信息處理方法,其特征在于,包括 當(dāng)需要訪問需進(jìn)行同步管理的對(duì)象時(shí),參照存儲(chǔ)于存儲(chǔ)器中的具有鏈接列表構(gòu)造的隊(duì)列的步驟,該隊(duì)列表示請(qǐng)求訪問該對(duì)象的線程的等待隊(duì)列,該鏈接列表將各線程的識(shí)別信息用指向隊(duì)列中的下一個(gè)線程的識(shí)別信息的指針連結(jié); 取得作為指向上述鏈接列表中的第一個(gè)線程的識(shí)別信息指針的頭指針?biāo)桓郊拥?、關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信息,判斷是否可以訪問的步驟;以及無法訪問時(shí),將上述線程的識(shí)別信息加入上述隊(duì)列的步驟。
23.一種計(jì)算機(jī)程序,其特征在于,使計(jì)算機(jī)實(shí)現(xiàn)以下功能 當(dāng)需要訪問需進(jìn)行同步管理的對(duì)象時(shí),參照存儲(chǔ)于存儲(chǔ)器中的具有鏈接列表構(gòu)造的隊(duì)列的步驟,該隊(duì)列表示請(qǐng)求訪問該對(duì)象的線程的等待隊(duì)列,該鏈接列表將各線程的識(shí)別信息用指向隊(duì)列中的下一個(gè)線程的識(shí)別信息的指針連結(jié); 取得作為指向上述鏈接列表中的第一個(gè)線程的識(shí)別信息指針的頭指針?biāo)桓郊拥?、關(guān)于上述對(duì)象的當(dāng)前狀態(tài)的信息,判斷是否可以訪問的步驟;以及無法訪問時(shí),將上述線程的識(shí)別信息加入上述隊(duì)列的步驟。
全文摘要
想要針對(duì)隊(duì)列移除數(shù)據(jù)的線程首先確認(rèn)所訪問的隊(duì)列中是否有能移除的數(shù)據(jù),如果有數(shù)據(jù),則將其移除(S22的Y、S24)。而如果沒有數(shù)據(jù),則線程將含有自己的線程的識(shí)別信息的線程信息推入同一隊(duì)列后,釋放處理器,并轉(zhuǎn)為待機(jī)狀態(tài)(S22的N、S28、S30)。之后,若隊(duì)列中有線程信息,則想要推入數(shù)據(jù)的線程判斷為有等待數(shù)據(jù)的線程,將該線程信息移除后,提供數(shù)據(jù),再次開始處理。
文檔編號(hào)G06F9/54GK102906706SQ20118002545
公開日2013年1月30日 申請(qǐng)日期2011年3月23日 優(yōu)先權(quán)日2010年5月24日
發(fā)明者永田章人 申請(qǐng)人:索尼電腦娛樂公司