国产精品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>

      一種線程訪問臨界區(qū)的方法、系統(tǒng)和終端設(shè)備的制作方法

      文檔序號:6368541閱讀:127來源:國知局
      專利名稱:一種線程訪問臨界區(qū)的方法、系統(tǒng)和終端設(shè)備的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及多線程調(diào)用領(lǐng)域,尤其涉及一種線程訪問臨界區(qū)的方法、系統(tǒng)和終端設(shè)備。
      背景技術(shù)
      現(xiàn)有技術(shù)中,不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。每個進程中訪問臨界資源的那段代碼稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個進程使用的共享資源)。每次只準許一個進程進入臨界區(qū),進入后不允許其他進程進入。不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。
      進程進入臨界區(qū)的調(diào)度原則是I)如果有若干進程要求進入空閑的臨界區(qū),一次僅允許一個進程進入。2)任何時候,處于臨界區(qū)內(nèi)的進程不可多于一個。如已有進程進入自己的臨界區(qū),則其它所有試圖進入臨界區(qū)的進程必須等待。3)進入臨界區(qū)的進程要在有限時間內(nèi)退出,以便其它進程能及時進入自己的臨界區(qū)。4)如果進程不能進入自己的臨界區(qū),則應(yīng)讓出CPU,避免進程出現(xiàn)“忙等”現(xiàn)象?,F(xiàn)有技術(shù)存在的問題多個進程互斥的訪問臨界區(qū)時,訪問效率低,等待時間長,CPU消耗大。

      發(fā)明內(nèi)容
      本發(fā)明實施例的目的在于提出一種線程訪問臨界區(qū)的方法,旨在解決現(xiàn)有技術(shù)多個進程互斥的訪問臨界區(qū)時,訪問效率低,等待時間長,CPU消耗大的技術(shù)問題。本發(fā)明實施例是這樣實現(xiàn)的,一種線程訪問臨界區(qū)的方法,所述方法包括步驟創(chuàng)建線程互斥鎖變量;創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始化所述線程互斥鎖變量為狀態(tài)值;獲取線程的訪問方式;判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。本發(fā)明實施例的另一目的在于提出一種線程訪問臨界區(qū)的系統(tǒng),所述系統(tǒng)包括第一創(chuàng)建模塊、第二創(chuàng)建模塊、初始模塊、獲取模塊、判斷模塊、訪問模塊和修改模塊;所述第一創(chuàng)建模塊,與所述第二創(chuàng)建模塊、初始模塊、判斷模塊和修改模塊相連,用于創(chuàng)建線程互斥鎖變量;所述第二創(chuàng)建模塊,與所述第一創(chuàng)建模塊和初始模塊相連,用于創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;
      所述初始模塊,與所述第一創(chuàng)建模塊、第二創(chuàng)建模塊和獲取模塊相連,用于初始化所述線程互斥鎖變量為狀態(tài)值,并發(fā)送獲取指令到所述獲取模塊;所述獲取模塊,與所述判斷模塊相連,用于接收所述初始模塊發(fā)送的獲取指令,并獲取線程的訪問方式,同時發(fā)送判斷指令到所述判斷模塊;所述判斷模塊,與所述獲取模塊、第一創(chuàng)建模塊、訪問模塊和修改模塊相連,用于接收所述獲取模塊發(fā)送的判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則發(fā)送訪問指令到所述訪問模塊,并發(fā)送修改指令到所述修改模塊;所述訪問模塊,與所述判斷模塊相連,用于接收所述判斷模塊發(fā)送的訪問指令,并允許所述線程以所述訪問方式訪問臨界區(qū);
      所述修改模塊,與所述判斷模塊和第一創(chuàng)建模塊相連,用于接收所述判斷模塊發(fā)送的修改指令,并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。本發(fā)明實施例的另一目的在于提出一種線程訪問臨界區(qū)的終端設(shè)備。本發(fā)明的有益效果本發(fā)明通過創(chuàng)建線程互斥鎖變量和創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始化所述線程互斥鎖變量為狀態(tài)值;獲取線程的訪問方式;判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。確保線程訪問臨界區(qū)前,能夠快速確定所述臨界區(qū)是否可用,如果所述臨界區(qū)不可用,線程可主動放棄CPU時間片,避免線程訪問笨重、耗時的系統(tǒng)鎖,提高了臨界區(qū)的訪問效率以及多線互斥訪問的效率,減少了 CPU消耗,同時提高了軟件產(chǎn)品的市場競爭力。尤其是線程訪問非常小的臨界區(qū)時,進一步提高了線程的訪問效率。通過原子遞增或者遞減,更加準確和有效的訪問臨界區(qū)。


      圖I是本發(fā)明一種線程訪問臨界區(qū)方法的第一優(yōu)選實施例流程圖;圖2是本發(fā)明32位線程互斥鎖變量的結(jié)構(gòu)示意圖;圖3是本發(fā)明一種線程訪問臨界區(qū)方法的第二優(yōu)選實施例流程圖;圖4是本發(fā)明一種線程訪問臨界區(qū)方法的第三優(yōu)選實施例流程圖;圖5是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第一優(yōu)選實施例結(jié)構(gòu)示意圖;圖6是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第二優(yōu)選實施例結(jié)構(gòu)示意圖;圖7是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第三優(yōu)選實施例結(jié)構(gòu)示意圖;圖8是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第四優(yōu)選實施例結(jié)構(gòu)示意圖;圖9是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第五優(yōu)選實施例結(jié)構(gòu)示意圖;圖10是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第六優(yōu)選實施例結(jié)構(gòu)示意圖。
      具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖和實施例,對本發(fā)明進行進一步詳細說明,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分。應(yīng)當理解,此處所描寫的具體實施例,僅僅用于解釋本發(fā)明,并不用以限制本發(fā)明。本發(fā)明通過創(chuàng)建線程互斥鎖變量和創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始化所述線程互斥鎖變量為狀態(tài)值;獲取線程的訪問方式;判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值;若否則禁止所述線程以所述訪問方式訪問臨界區(qū)。確保線程訪問臨界區(qū)前,能夠快速確定所述臨界區(qū)是否可用,如果所述臨界區(qū)不可用,線程可主動放棄CPU時間片,避免線程訪問笨重、耗時的系統(tǒng)鎖,提高了臨界區(qū)的訪問效率以及多線互斥訪問的效率,減少了 CPU消耗,同時提高了軟件產(chǎn)品的市場競爭力。尤其是線程訪問非常小的臨界區(qū)時,進一步提高了線程的訪問效率。通過原子遞增或者遞減,更加準確和有效的訪問臨界區(qū)。實施例一圖I是本發(fā)明一種線程訪問臨界區(qū)方法的第一優(yōu)選實施例流程圖。所述的方法包括以下步驟S101,創(chuàng)建線程互斥鎖變量;所述線程互斥鎖變量的位數(shù)為CPU —次能處理的最大位數(shù);所述線程互斥鎖變量為有符號整數(shù)的線程互斥鎖變量;所述線程互斥鎖變量的最高位為符號位,當所述符號位為O時,表示所述線程互斥鎖變量中的值為正整數(shù);當所述符號位為I時,表示所述線程互斥鎖變量中的值為負整數(shù);所述線程互斥鎖變量的最高位的下一位若為I則表示線程互斥鎖空閑,允許線程訪問臨界區(qū);若為O則表示已經(jīng)有線程訪問臨界區(qū);所述線程互斥鎖變量的其他位為讀鎖計數(shù)器位,用于存儲當前讀臨界區(qū)的線程的
      數(shù)量;所述線程互斥鎖變量的值以補碼表示;為便于理解,舉例說明,如圖2所示為本發(fā)明32位線程互斥鎖變量lock的結(jié)構(gòu)示意圖,其中S200為第O位,S201為第29位,S202為第30位,S203為第31位,其中最高位為S203,S203為符號位,最高位的下一位為S202,其余位S200-S201為讀鎖計數(shù)器;
      當有一個線程訪問臨界區(qū)時,所述線程互斥鎖變量的值為0x3ffffffT ;當有兩個線程訪問臨界區(qū)時,所述線程互斥鎖變量的值為0x3ffffffe,以此類推;S102,創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;所述線程互斥鎖變量還包括4個狀態(tài)值,分別是空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值和讀溢出狀態(tài)值,其中空閑狀態(tài)值表示線程可以寫臨界區(qū)也可以讀臨界區(qū);讀狀態(tài)值表示線程可以讀臨界區(qū);寫狀態(tài)值表示不允許線程讀或者寫所述臨界區(qū);讀溢出狀態(tài)值表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,禁止其他線程讀所述臨界區(qū);為便于理解,以32位CPU舉例,創(chuàng)建所述線程互斥鎖變量lock的4個狀態(tài)值為所述空閑狀態(tài)值為0x40000000 ;所述讀狀態(tài)值為大于O且不等于寫狀態(tài)值的值,取值范圍在I至0x3fffffff之間;所述寫狀態(tài)值為0,即0x00000000,當所述線程互斥鎖變量的值為寫狀態(tài)值時,不
      允許線程讀或者寫所述臨界區(qū);
      所述讀溢出狀態(tài)值指所述符號位為I的值;S103,初始化所述線程互斥鎖變量為狀態(tài)值;為便于理解,以32位CPU舉例初始化所述線程互斥鎖變量lock為空閑狀態(tài)值0x40000000 ;S104,獲取線程的訪問方式;所述訪問方式包括讀訪問方式和寫訪問方式;S105,判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值;若否則禁止所述線程以所述訪問方式訪問臨界區(qū)。為便于理解,繼續(xù)舉例假設(shè)所述線程互斥鎖變量lock的當前值為0x3ffffffc,獲取到的線程的訪問方式為讀訪問方式;判斷所述線程互斥鎖變量lock的當前值0x3ffffffc是否等于所述讀狀態(tài)值,由于當前值0x3ffffffc是在讀狀態(tài)值的取值范圍內(nèi),所以判斷結(jié)果為是,則允許所述線程以所述讀訪問方式訪問臨界區(qū),并根據(jù)所述讀訪問方式修改所述線程互斥鎖變量中的值。實施例二圖3是本發(fā)明一種線程訪問臨界區(qū)方法的第二優(yōu)選實施例流程圖。所述的方法包括以下步驟S301,創(chuàng)建線程互斥鎖變量;所述線程互斥鎖變量的位數(shù)為CPU —次能處理的最大位數(shù);S302,創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;S303,初始化所述線程互斥鎖變量為狀態(tài)值;S304,獲取線程的讀訪問方式;S305,判斷所述線程互斥鎖變量中的當前值是否等于讀狀態(tài)值或者空閑狀態(tài)值,如是則進入步驟S306 ;若否則進入步驟S308 ;S306,允許所述線程讀所述臨界區(qū),并根據(jù)所述讀訪問方式將所述線程互斥鎖變量中的當前值減I;為便于理解,繼續(xù)舉例假設(shè)所述線程互斥鎖變量lock的當前值為0x40000000,獲取到的線程的訪問方式為讀訪問方式;判斷所述線程互斥鎖變量lock的當前值0x40000000是否等于所述空閑狀態(tài)值,由于當前值0x40000000等于所述空閑狀態(tài)值0x40000000,所以判斷結(jié)果為是,則允許所述線程以所述讀訪問方式訪問臨界區(qū),并根據(jù)所述讀訪問方式將所述線程互斥鎖變量lock中的當前值0x40000000減1,這時,所述線程互斥鎖變量lock中的當前值為0x3fffffff ;
      S307,當所述線程讀所述臨界區(qū)結(jié)束后,將所述線程互斥鎖變量中的當前值加I ;
      為便于理解,繼續(xù)舉例當所述線程讀所述臨界區(qū)結(jié)束后,將所述線程互斥鎖變量lock中的當前值0x3fffffff加1,這時,所述線程互斥鎖變量lock中的當前值為0x40000000,即所述線程互斥鎖變量中的當前值又變?yōu)榭臻e狀態(tài)值,這時候允許線程讀臨界區(qū)或者寫臨界區(qū);
      S308,禁止所述線程讀所述臨界區(qū)。禁止線程讀臨界區(qū)時包括兩種情況I)所述線程互斥鎖變量中的當前值等于讀溢出狀態(tài)值,即所述線程互斥鎖變量的符號位為1,表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,則 禁止其他線程讀所述臨界區(qū);2)所述線程互斥鎖變量的當前值等于寫狀態(tài)值,表示有一個線程在寫所述臨界區(qū),這時禁止其他線程讀所述臨界區(qū)。對上述方案進一步優(yōu)化在于,所述“將所述線程互斥鎖變量中的當前值減I”為原子遞減;所述“將所述線程互斥鎖變量中的當前值加I”為原子遞增;為便于理解,繼續(xù)舉例原子遞減為lock-;避免所述線程互斥鎖變量在遞減時被系統(tǒng)中斷;原子遞增為lock++ ;避免所述線程互斥鎖變量在遞增時被系統(tǒng)中斷。實施例三圖4是本發(fā)明一種線程訪問臨界區(qū)方法的第三優(yōu)選實施例流程圖。所述的方法包括以下步驟S401,創(chuàng)建線程互斥鎖變量;所述線程互斥鎖變量的位數(shù)為CPU —次能處理的最大位數(shù);S402,創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;S403,初始化所述線程互斥鎖變量為狀態(tài)值;S404,獲取線程的寫訪問方式;S405,判斷所述線程互斥鎖變量中的當前值是否等于空閑狀態(tài)值,若是則進入步驟S406 ;若否則進入步驟S408 ;只有當所述線程互斥鎖變量中的當前值等于空閑狀態(tài)值時才允許線程寫臨界區(qū);S406,允許所述線程寫所述臨界區(qū),并根據(jù)所述寫訪問方式修改所述線程互斥鎖變量中的當前值為寫狀態(tài)值;繼續(xù)舉例,即修改所述線程互斥鎖變量中的當前值為所述寫狀態(tài)值0x000000000,這時禁止其他線程讀或者寫所述臨界區(qū);S407,當所述線程寫所述臨界區(qū)結(jié)束后,修改所述線程互斥鎖變量中的當前值為空閑狀態(tài)值。繼續(xù)舉例,即修改所述線程互斥鎖變量中的當前值為0x400000000,這時其他線程可以讀或者寫臨界區(qū);S408,禁止所述線程寫所述臨界區(qū)。此時,禁止所述線程寫所述臨界區(qū)包括三種情況I)所述線程互斥鎖變量中的當前值等于所述寫狀態(tài)值,表示有一個線程在寫所述臨界區(qū);2)所述線程互斥鎖變量中的當前值等于所述讀狀態(tài)值,表示有一個或多個線程在讀所述臨界區(qū);
      3)所述線程互斥鎖變量中的值等于所述讀溢出值,表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,則禁止其他線程讀所述臨界區(qū),同理,也禁止其他線程寫所述臨界區(qū)。有益效果本發(fā)明通過創(chuàng)建線程互斥鎖變量和創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始化所述線程互斥鎖變量為狀態(tài)值;獲取線程的訪問方式;判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值;若否則禁止所述線程以所述訪問方式訪問臨界區(qū)。確保線程訪問臨界區(qū)前,能夠快速確定所述臨界區(qū)是否可用,如果所述臨界區(qū)不可用,線程可主動放棄CPU時間片,避免線程訪問笨重、耗時的系統(tǒng)鎖,提高了臨界區(qū)的訪問效率以及多線互斥訪問的效率,減少了 CPU消耗,同時提高了軟件產(chǎn)品的市場競爭力。尤其是線、程訪問非常小的臨界區(qū)時,進一步提高了線程的訪問效率。通過原子遞增或者遞減,更加準確和有效的訪問臨界區(qū)。實施例四圖5是本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第一優(yōu)選實施例結(jié)構(gòu)示意圖。所述系統(tǒng)包括第一創(chuàng)建模塊、第二創(chuàng)建模塊、初始模塊、獲取模塊、判斷模塊、訪問模塊和修改模塊;所述第一創(chuàng)建模塊,與所述第二創(chuàng)建模塊、初始模塊、判斷模塊和修改模塊相連,用于創(chuàng)建線程互斥鎖變量;所述線程互斥鎖變量的位數(shù)為CPU —次能處理的最大位數(shù);所述線程互斥鎖變量為有符號整數(shù)的線程互斥鎖變量;所述線程互斥鎖變量的最高位為符號位,當所述符號位為O時,表示所述線程互斥鎖變量中的值為正整數(shù);當所述符號位為I時,表示所述線程互斥鎖變量中的值為負整數(shù);所述線程互斥鎖變量的最高位的下一位若為I則表示線程互斥鎖空閑,允許線程訪問臨界區(qū);若為O則表示已經(jīng)有線程訪問臨界區(qū);所述線程互斥鎖變量的其他位為讀鎖計數(shù)器位,用于存儲當前讀臨界區(qū)的線程的
      數(shù)量;所述線程互斥鎖變量的值以補碼表示;為便于理解,舉例說明,如圖2所示為本發(fā)明32位線程互斥鎖變量lock的結(jié)構(gòu)示意圖,其中S200為第O位,S201為第29位,S202為第30位,S203為第31位,其中最高位為S203,S203為符號位,最高位的下一位為S202,其余位S200-S201為讀鎖計數(shù)器;當有一個線程訪問臨界區(qū)時,所述線程互斥鎖變量的值為0x3fffffff ;當有兩個線程訪問臨界區(qū)時,所述線程互斥鎖變量的值為0x3ffffffe,以此類推;所述第二創(chuàng)建模塊,與所述第一創(chuàng)建模塊和初始模塊相連,用于創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;所述線程互斥鎖變量還包括4個狀態(tài)值,分別是空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值和讀溢出狀態(tài)值,其中空閑狀態(tài)值表示線程可以寫臨界區(qū)也可以讀臨界區(qū);讀狀態(tài)值表示線程可以讀臨界區(qū);寫狀態(tài)值表示不允許線程讀或者寫所述臨界區(qū);讀溢出狀態(tài)值表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,禁止其他線程讀所述臨界區(qū);為便于理解,以32位CPU舉例,創(chuàng)建所述線程互斥鎖變量lock的4個狀態(tài)值為所述空閑狀態(tài)值為0x40000000 ;所述讀狀態(tài)值為大于O且不等于寫狀態(tài)值的值,取值范圍在I至0x3fffffff之間;所述寫狀態(tài)值為0,即0x00000000,當所述線程互斥鎖變量的值為寫狀態(tài)值時,不允許線程讀或者寫所述臨界區(qū);所述讀溢出狀態(tài)值指所述符號位為I的值;所述初始模塊,與所述第一創(chuàng)建模塊、第二創(chuàng)建模塊和獲取模塊相連,用于初始化所述線程互斥鎖變量為狀態(tài)值,并發(fā)送獲取指令到所述獲取模塊;為便于理解,以32位CPU舉例初始化所述線程互斥鎖變量lock為空閑狀態(tài)值0x40000000 ;所述獲取模塊,與所述初始模塊和判斷模塊相連,用于接收所述初始模塊發(fā)送的獲取指令,并獲取線程的訪問方式,同時發(fā)送判斷指令到所述判斷模塊;所述訪問方式包括讀訪問方式和寫訪問方式;所述判斷模塊,與所述獲取模塊、第一創(chuàng)建模塊、訪問模塊和修改模塊相連,用于接收所述獲取模塊發(fā)送的判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則發(fā)送訪問指令到所述訪問模塊,并發(fā)送修改指令到所述修改模塊;所述訪問模塊,與所述判斷模塊相連,用于接收所述判斷模塊發(fā)送的訪問指令,并允許所述線程以所述訪問方式訪問臨界區(qū);所述修改模塊,與所述判斷模塊和第一創(chuàng)建模塊相連,用于接收所述判斷模塊發(fā)送的修改指令,并根據(jù)所述修改指令修改所述線程互斥鎖變量中的當前值;為便于理解,繼續(xù)舉例假設(shè)所述線程互斥鎖變量lock的當前值為0x3ffffffc,所述獲取模塊獲取到的線程的訪問方式為讀訪問方式;所述判斷模塊判斷所述線程互斥鎖變量lock的當前值0x3ffffffc是否等于所述讀狀態(tài)值,由于當前值0x3ffffffc是在讀狀態(tài)值的取值范圍內(nèi),所以判斷結(jié)果為是,則所述判斷模塊發(fā)送訪問指令到所述訪問模塊,并發(fā)送修改指令到所述修改模塊;所述訪問模塊接收到所述訪問指令,允許所述線程以所述讀訪問方式訪問臨界區(qū);所述修改模塊根據(jù)所述讀訪問方式修改所述線程互斥鎖變量中的值。對上述方案進一步優(yōu)化在于,所述狀態(tài)值包括空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值;所述訪問方式包括讀訪問方式和寫訪問方式,如圖6所示為本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第二優(yōu)選實施例結(jié)構(gòu)示意圖;所述獲取模塊包括第一獲取單元;所述判斷模塊包括第一判斷單元;所述訪問模塊包括第一訪問單元;所述修改模塊包括第一修改單元;所述初始模塊,還用于發(fā)送第一獲取指令到所述第一獲取單元;所述第一獲取單元,與所述第一判斷單元和初始模塊相連,用于接收所述初始模塊發(fā)送的第一獲取指令,根據(jù)所述第一獲取指令獲取線程的讀訪問方式,并發(fā)送第一判斷指令到所述第一判斷單元;所述第一判斷單元,與所述第一獲取單元、第一創(chuàng)建模塊、第一訪問單元和第一修改單元相連,用于接收所述第一獲取單元發(fā)送的第一判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于讀狀態(tài)值或者空閑狀態(tài)值,若是則發(fā)送讀訪問指令到所述第一訪問單元,同時發(fā)送 第一修改指令到所述第一修改單元;所述第一訪問單元,與所述第一判斷單元相連,用于接收所述第一判斷單元發(fā)送的讀訪問指令,并允許所述線程讀所述臨界區(qū);所述第一修改單元,與所述第一判斷單元和第一創(chuàng)建模塊相連,用于接收所述第一判斷單元發(fā)送的第一修改指令,并根據(jù)所述第一修改指令將所述線程互斥鎖變量中的當前值減I;所述“將所述線程互斥鎖變量中的當前值減I”為原子遞減;為便于理解,繼續(xù)舉例原子遞減為lock-;避免所述線程互斥鎖變量在遞減時被系統(tǒng)中斷;假設(shè)所述線程互斥鎖變量lock的當前值為0x40000000,所述第一獲取單元獲取到的線程的訪問方式為讀訪問方式;所述第一判斷單元判斷所述線程互斥鎖變量lock的當前值0x40000000是否等于所述空閑狀態(tài)值,由于當前值0x40000000等于所述空閑狀態(tài)值0x40000000,所以判斷結(jié)果為是,則所述第一判斷單元發(fā)送訪問指令到所述第一訪問單元,同時發(fā)送第一修改指令到所述第一修改單元;所述第一訪問單元接收到所述第一判斷單元發(fā)送的訪問指令后,允許所述線程以所述讀訪問方式訪問臨界區(qū);所述第一修改單元接收到所述第一判斷單元發(fā)送的第一修改指令后,根據(jù)所述第一修改指令將所述線程互斥鎖變量lock中的當前值0x40000000減1,這時,所述線程互斥鎖變量lock中的當前值為0x3fffffff。對上述方案進一步優(yōu)化在于,所述修改模塊還包括第二修改單元,如圖7所示為本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第三優(yōu)選實施例結(jié)構(gòu)示意圖;所述第一訪問單元,還用于當所述線程讀所述臨界區(qū)結(jié)束后發(fā)送第二修改指令到所述第二修改單元;所述第二修改單元,與所述第一創(chuàng)建模塊和第一訪問單元相連,用于接收所述第一訪問單元發(fā)送的第二修改指令,并根據(jù)所述第二修改指令將所述線程互斥鎖變量中的當前值加I;所述“將所述線程互斥鎖變量中的當前值加I”為原子遞增;為便于理解,繼續(xù)舉例原子遞增為lock++ ;避免所述線程互斥鎖變量在遞增時被系統(tǒng)中斷;所述第一訪問單元判斷所述線程讀所述臨界區(qū)結(jié)束時,發(fā)送第二修改指令到所述第二修改單元;所述第二修改單元接收到所述第一訪問單元發(fā)送的第二修改指令后,將所述線程互斥鎖變量lock中的當前值0x3fffffff加I,這時,所述線程互斥鎖變量lock中的當前值為0x40000000,即所述線程互斥鎖變量中的當前值又變?yōu)榭臻e狀態(tài)值,這時候允許線程讀臨界區(qū)或者寫臨界區(qū);對上述方案進一步優(yōu)化在于,所述獲取模塊還包括第二獲取單元;所述判斷模塊還包括第二判斷單元;所述訪問模塊還包括第二訪問單元;所述修改模塊還包括第三修改單元,如圖8所示為本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第四優(yōu)選實施例結(jié)構(gòu)示意圖;所述第二獲取單元,與所述第二判斷單元和初始模塊相連,用于獲取線程的寫訪問方式,并發(fā)送第二判斷指令到所述第二判斷單元;所述第二判斷單元,與所述第二獲取單元、第一創(chuàng)建模塊、第二訪問單元和第三修改單元相連,用于接收所述第二獲取單元發(fā)送的第二判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于空閑狀態(tài)值,若是則發(fā)送寫指令到所述第二訪問單元,同時發(fā)送第三修改指令到所述第三修改單元;所述第二訪問單元,與所述第二判斷單元相連,用于接收所述第二判斷單元發(fā)送的寫指令,并允許所述線程寫所述臨界區(qū);所述第三修改單元,與所述第二判斷單元和第一創(chuàng)建模塊相連,用于接收所述第二判斷單元發(fā)送的第三修改指令,并根據(jù)所述第三修改指令修改所述線程互斥鎖變量中的當前值為寫狀態(tài)值。繼續(xù)舉例,即修改所述線程互斥鎖變量中的當前值為所述寫狀態(tài)值0x000000000,這時禁止其他線程讀或者寫所述臨界區(qū)。對上述方案進一步優(yōu)化在于,所述修改模塊還包括第四修改單元,如圖9所示為本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第五優(yōu)選實施例結(jié)構(gòu)示意圖;所述第二訪問單元,還用于當所述線程寫所述臨界區(qū)結(jié)束后發(fā)送第四修改指令到所述第四修改單元;所述第四修改單元,與所述第一創(chuàng)建模塊和第二訪問單元相連,用于接收所述第二訪問單元發(fā)送的第四修改指令,并根據(jù)所述第四修改指令修改所述線程互斥鎖變量中的當前值為空閑狀態(tài)值。繼續(xù)舉例,即修改所述線程互斥鎖變量中的當前值為0x400000000,這時其他線程可以讀或者寫臨界區(qū)。對上述方案進一步優(yōu)化在于,所述系統(tǒng)還包括禁止模塊,所述禁止模塊包括第一禁止單元和第二禁止單元,如圖10所示為本發(fā)明一種線程訪問臨界區(qū)系統(tǒng)的第六優(yōu)選實施例結(jié)構(gòu)示意圖;
      所述第一判斷單元還用于判斷所述線程互斥鎖變量中的當前值是否等于讀狀態(tài)值或者空閑狀態(tài)值,若否則發(fā)送第一禁止指令到所述第一禁止單元;所述第一禁止單元,與所述第一判斷單元相連,用于接收所述第一判斷單元發(fā)送的第一禁止指令,并根據(jù)所述第一禁止指令禁止所述線程讀所述臨界區(qū);禁止線程讀臨界區(qū)時包括兩種情況3)所述線程互斥鎖變量中的當前值等于讀溢出狀態(tài)值,即所述線程互斥鎖變量的符號位為1,表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,則禁止其他線程讀所述臨界區(qū);4)所述線程互斥鎖變量的當前值等于寫狀態(tài)值,表示有一個線程在寫所述臨界區(qū),這時禁止其他線程讀所述臨界區(qū);
      所述第二判斷單元還用于判斷所述線程互斥鎖變量中的當前值是否等于空閑狀態(tài)值,若否則發(fā)送第二禁止指令到所述第二禁止單元;所述第二禁止單元,與所述第二判斷單元相連,用于接收所述第二判斷單元發(fā)送的第二禁止指令,并根據(jù)所述第二禁止指令禁止所述線程寫所述臨界區(qū);此時,禁止所述線程寫所述臨界區(qū)包括三種情況4)所述線程互斥鎖變量中的當前值等于所述寫狀態(tài)值,表示有一個線程在寫所述臨界區(qū);
      5)所述線程互斥鎖變量中的當前值等于所述讀狀態(tài)值,表示有一個或多個線程在讀所述臨界區(qū);所述線程互斥鎖變量中的值等于所述讀溢出值,表示讀臨界區(qū)的線程的數(shù)量超出了預(yù)定的上限范圍,則禁止其他線程讀所述臨界區(qū),同理,也禁止其他線程寫所述臨界區(qū)。有益效果本發(fā)明通過第一創(chuàng)建模塊創(chuàng)建線程互斥鎖變量;第二創(chuàng)建模塊創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始模塊初始化所述線程互斥鎖變量為狀態(tài)值;獲取模塊獲取線程的訪問方式;判斷模塊判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則發(fā)送訪問指令到所述訪問模塊,并發(fā)送修改指令到所述修改模塊;訪問模塊接收到所述判斷模塊發(fā)送的訪問指令后,允許所述線程以所述訪問方式訪問臨界區(qū);修改模塊接收到所述判斷模塊發(fā)送的修改指令后,根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。確保了線程訪問臨界區(qū)前,能夠快速確定所述臨界區(qū)是否可用,如果所述臨界區(qū)不可用,線程可主動放棄CPU時間片,避免線程訪問笨重、耗時的系統(tǒng)鎖,提高了臨界區(qū)的訪問效率以及多線互斥訪問的效率,減少了 CPU消耗,同時提高了軟件產(chǎn)品的市場競爭力。尤其是線程訪問非常小的臨界區(qū)時,進一步提高了線程的訪問效率。進一步將所述獲取模塊、判斷模塊、訪問模塊和修改模塊進行細化,由第一獲取單元、第一判斷單元、第一訪問單元、第一修改單元和第二修改單元實現(xiàn)讀臨界區(qū)的功能;由第二獲取單元、第二判斷單元、第二訪問單元、第三修改單元和第四修改單元實現(xiàn)寫臨界區(qū)的功能。進一步增加禁止模塊,當判斷模塊判斷所述線程互斥鎖變量中的當前值不等于所述狀態(tài)值時,所述禁止模塊禁止線程訪問臨界區(qū)。特別地,通過原子遞增或者遞減,更加準確和有效的訪問臨界區(qū)。本領(lǐng)域的普通技術(shù)人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序指令相關(guān)硬件來完成的,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,所述的存儲介質(zhì)可以為ROM、RAM、磁盤、光盤等。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
      權(quán)利要求
      1.一種線程訪問臨界區(qū)的方法,其特征在于,所述方法包括步驟 創(chuàng)建線程互斥鎖變量; 創(chuàng)建所述線程互斥鎖變量的狀態(tài)值; 初始化所述線程互斥鎖變量為狀態(tài)值; 獲取線程的訪問方式; 判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。
      2.根據(jù)權(quán)利要求I所述的線程訪問臨界區(qū)的方法,其特征在于,所述狀態(tài)值包括空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值; 所述訪問方式包括讀訪問方式和寫訪問方式; 所述步驟“獲取線程的訪問方式”為獲取線程的讀訪問方式; 所述步驟“判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值”具體為 判斷所述線程互斥鎖變量中的當前值是否等于讀狀態(tài)值或者空閑狀態(tài)值,若是則允許所述線程讀所述臨界區(qū); 根據(jù)所述讀訪問方式將所述線程互斥鎖變量中的當前值減I。
      3.根據(jù)權(quán)利要求2所述的線程訪問臨界區(qū)的方法,其特征在于,所述步驟“根據(jù)所述讀訪問方式將所述線程互斥鎖變量中的當前值減I”之后還包括 當所述線程讀所述臨界區(qū)結(jié)束后,將所述線程互斥鎖變量中的當前值加I。
      4.根據(jù)權(quán)利要求I所述的線程訪問臨界區(qū)的方法,其特征在于,所述狀態(tài)值包括空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值; 所述訪問方式包括讀訪問方式和寫訪問方式; 所述步驟“獲取線程的訪問方式”為獲取線程的寫訪問方式; 所述步驟“判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值”具體為 判斷所述線程互斥鎖變量中的當前值是否等于空閑狀態(tài)值,若是則允許所述線程寫所述臨界區(qū); 根據(jù)所述寫訪問方式修改所述線程互斥鎖變量中的當前值為寫狀態(tài)值。
      5.根據(jù)權(quán)利要求4所述的線程訪問臨界區(qū)的方法,其特征在于,所述步驟“根據(jù)所述寫訪問方式修改所述線程互斥鎖變量中的當前值為寫狀態(tài)值”之后還包括步驟 當所述線程寫所述臨界區(qū)結(jié)束后,修改所述線程互斥鎖變量中的當前值為空閑狀態(tài)值。
      6.一種線程訪問臨界區(qū)的系統(tǒng),其特征在于,所述系統(tǒng)包括第一創(chuàng)建模塊、第二創(chuàng)建模塊、初始模塊、獲取模塊、判斷模塊、訪問模塊和修改模塊; 所述第一創(chuàng)建模塊,與所述第二創(chuàng)建模塊、初始模塊、判斷模塊和修改模塊相連,用于創(chuàng)建線程互斥鎖變量; 所述第二創(chuàng)建模塊,與所述第一創(chuàng)建模塊和初始模塊相連,用于創(chuàng)建所述線程互斥鎖變量的狀態(tài)值; 所述初始模塊,與所述第一創(chuàng)建模塊、第二創(chuàng)建模塊和獲取模塊相連,用于初始化所述線程互斥鎖變量為狀態(tài)值,并發(fā)送獲取指令到所述獲取模塊; 所述獲取模塊,與所述初始模塊和判斷模塊相連,用于接收所述初始模塊發(fā)送的獲取 指令,并獲取線程的訪問方式,同時發(fā)送判斷指令到所述判斷模塊; 所述判斷模塊,與所述獲取模塊、第一創(chuàng)建模塊、訪問模塊和修改模塊相連,用于接收所述獲取模塊發(fā)送的判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則發(fā)送訪問指令到所述訪問模塊,并發(fā)送修改指令到所述修改模塊; 所述訪問模塊,與所述判斷模塊相連,用于接收所述判斷模塊發(fā)送的訪問指令,并允許所述線程以所述訪問方式訪問臨界區(qū); 所述修改模塊,與所述判斷模塊和第一創(chuàng)建模塊相連,用于接收所述判斷模塊發(fā)送的修改指令,并根據(jù)所述修改指令修改所述線程互斥鎖變量中的當前值。
      7.根據(jù)權(quán)利要求6所述線程訪問臨界區(qū)的系統(tǒng),其特征在于,所述狀態(tài)值包括空閑狀態(tài)值、讀狀態(tài)值、寫狀態(tài)值;所述訪問方式包括讀訪問方式和寫訪問方式; 所述獲取模塊包括第一獲取單元;所述判斷模塊包括第一判斷單元;所述訪問模塊包括第一訪問單元;所述修改模塊包括第一修改單元; 所述初始模塊,還用于發(fā)送第一獲取指令到所述第一獲取單元; 所述第一獲取單元,與所述第一判斷單元和初始模塊相連,用于接收所述初始模塊發(fā)送的第一獲取指令,根據(jù)所述第一獲取指令獲取線程的讀訪問方式,并發(fā)送第一判斷指令到所述第一判斷單元; 所述第一判斷單元,與所述第一獲取單元、第一創(chuàng)建模塊、第一訪問單元和第一修改單元相連,用于接收所述第一獲取單元發(fā)送的第一判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于讀狀態(tài)值或者空閑狀態(tài)值,若是則發(fā)送讀訪問指令到所述第一訪問單元,同時發(fā)送第一修改指令到所述第一修改單元; 所述第一訪問單元,與所述第一判斷單元相連,用于接收所述第一判斷單元發(fā)送的讀訪問指令,并允許所述線程讀所述臨界區(qū); 所述第一修改單元,與所述第一判斷單元和第一創(chuàng)建模塊相連,用于接收所述第一判斷單元發(fā)送的第一修改指令,并根據(jù)所述第一修改指令將所述線程互斥鎖變量中的當前值減I。
      8.根據(jù)權(quán)利要求7所述線程訪問臨界區(qū)的系統(tǒng),其特征在于,所述修改模塊還包括第二修改單元; 所述第一訪問單元,還用于當所述線程讀所述臨界區(qū)結(jié)束后發(fā)送第二修改指令到所述第二修改單元; 所述第二修改單元,與所述第一創(chuàng)建模塊和第一訪問單元相連,用于接收所述第一訪問單元發(fā)送的第二修改指令,并根據(jù)所述第二修改指令將所述線程互斥鎖變量中的當前值加I。
      9.根據(jù)權(quán)利要求8所述線程訪問臨界區(qū)的系統(tǒng),其特征在于,所述獲取模塊還包括第二獲取單元;所述判斷模塊還包括第二判斷單元;所述訪問模塊還包括第二訪問單元;所述修改模塊還包括第三修改單元;所述第二獲取單元,與所述第二判斷單元和初始模塊相連,用于獲取線程的寫訪問方式,并發(fā)送第二判斷指令到所述第二判斷單元; 所述第二判斷單元,與所述第二獲取單元、第一創(chuàng)建模塊、第二訪問單元和第三修改單元相連,用于接收所述第二獲取單元發(fā)送的第二判斷指令,并判斷所述線程互斥鎖變量中的當前值是否等于空閑狀態(tài)值,若是則發(fā)送寫指令到所述第二訪問單元,同時發(fā)送第三修改指令到所述第三修改單元; 所述第二訪問單元,與所述第二判斷單元相連,用于接收所述第二判斷單元發(fā)送的寫指令,并允許所述線程寫所述臨界區(qū); 所述第三修改單元,與所述第二判斷單元和第一創(chuàng)建模塊相連,用于接收所述第二判斷單元發(fā)送的第三修改指令,并根據(jù)所述第三修改指令修改所述線程互斥鎖變量中的當前值為寫狀態(tài)值。
      10.根據(jù)權(quán)利要求9所述線程訪問臨界區(qū)的系統(tǒng),其特征在于,所述修改模塊還包括第四修改單元; 所述第二訪問單元,還用于當所述線程寫所述臨界區(qū)結(jié)束后發(fā)送第四修改指令到所述第四修改單元; 所述第四修改單元,與所述第一創(chuàng)建模塊和第二訪問單元相連,用于接收所述第二訪問單元發(fā)送的第四修改指令,并根據(jù)所述第四修改指令修改所述線程互斥鎖變量中的當前值為空閑狀態(tài)值。
      11.一種線程訪問臨界區(qū)的終端設(shè)備,其特征在于,所述的終端設(shè)備包括權(quán)利要求6-10任一種所述的線程訪問臨界區(qū)的系統(tǒng)。
      全文摘要
      本發(fā)明公開一種線程訪問臨界區(qū)的方法、系統(tǒng)和終端設(shè)備。本發(fā)明通過創(chuàng)建線程互斥鎖變量和創(chuàng)建所述線程互斥鎖變量的狀態(tài)值;初始化所述線程互斥鎖變量為狀態(tài)值;獲取線程的訪問方式;判斷所述線程互斥鎖變量中的當前值是否等于所述狀態(tài)值,若是則允許所述線程以所述訪問方式訪問臨界區(qū),并根據(jù)所述訪問方式修改所述線程互斥鎖變量中的當前值。確保線程訪問臨界區(qū)前,能夠快速確定所述臨界區(qū)是否可用,如果所述臨界區(qū)不可用,線程可主動放棄CPU時間片,避免線程訪問笨重、耗時的系統(tǒng)鎖,提高了臨界區(qū)的訪問效率以及多線互斥訪問的效率,減少了CPU消耗,同時提高了軟件產(chǎn)品的市場競爭力。通過原子遞增或者遞減,更加準確和有效的訪問臨界區(qū)。
      文檔編號G06F9/46GK102662747SQ20121012118
      公開日2012年9月12日 申請日期2012年4月23日 優(yōu)先權(quán)日2012年4月23日
      發(fā)明者劉驍 申請人:深圳市融創(chuàng)天下科技股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1