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

      檢測和解除死鎖的方法、裝置和系統(tǒng)的制作方法

      文檔序號:6464061閱讀:248來源:國知局
      專利名稱:檢測和解除死鎖的方法、裝置和系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種在多任務(wù)情況下;^r測和解除死 鎖的方法、裝置和系統(tǒng)。
      技術(shù)背景隨著計(jì)算機(jī)技術(shù)的發(fā)展,多任務(wù)、多線程或者多處理器的技術(shù)應(yīng)用目前已 經(jīng)非常廣泛。所述的多任務(wù)則是指同一個程序能有幾個并發(fā)執(zhí)行的路徑,這些 任務(wù)共享內(nèi)存地址空間,可以并發(fā)異步執(zhí)行。由于計(jì)算機(jī)中的資源是有限的,為了保護(hù)共享資源,需要保證每次只有一個任務(wù)或者一個處理器訪問共享資源。軟件中使用的資源,就是共享內(nèi)存中的 一個位置,當(dāng)一個任務(wù)獲取資源之后,將在這個內(nèi)存位置設(shè)置資源標(biāo)記,此時, 其他任務(wù)就不能獲取該資源,而是持續(xù)等待,直到獲取該資源。該任務(wù)使用完 所述資源之后,需要進(jìn)行釋放資源操作,別的任務(wù)才能獲取該資源。但是資源的方法使用不當(dāng)就有可能造成死鎖。通常,出現(xiàn)死鎖的情況有兩種情況一在同一軟件中有兩個并行的任務(wù),任務(wù)1獲取資源A,同時任務(wù)2獲 取資源B,當(dāng)任務(wù)1試圖在釋放資源A之前獲取資源B、而任務(wù)2試圖在釋放資源B 之前獲取資源A,那么任務(wù)1獲取資源B和任務(wù)2獲取資源A都不會成功,并且會一 直等待下去,這樣就會造成死鎖。情況二如果一個任務(wù)獲取了鎖之后,沒有釋放這個鎖,其他任務(wù)也就無 法獲取這個鎖,造成其他任務(wù)無法運(yùn)行,進(jìn)而造成死鎖。在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中存在如下問題當(dāng)程序中出現(xiàn)死鎖現(xiàn)象后,軟件將會喪失運(yùn)行功能從而無法正常運(yùn)行,進(jìn) 而造成軟件的可靠性低,并給軟件用戶造成損失。 發(fā)明內(nèi)容一方面,本發(fā)明的實(shí)施例提供一種4企測死鎖的方法和裝置,能夠檢測出程 序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例檢測死鎖的方法采用以下技術(shù)方案一種^r測死鎖的方法,包括為任務(wù)設(shè)置棧;將所述任務(wù)所獲的資源的資源標(biāo)記依次壓入棧;當(dāng)所述任務(wù)釋放所述資源時,將壓入棧中的所述資源標(biāo)記從棧中彈出; 比較所述任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一 致,若不一致,則判定發(fā)生死鎖。本發(fā)明的實(shí)施例檢測死鎖的裝置采用以下技術(shù)方案 一種檢測死鎖的裝置,包括 棧設(shè)置模塊,用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊,用于當(dāng)所述棧設(shè)置模塊為任務(wù)設(shè)置棧后,將所述任務(wù) 所獲的資源的資源標(biāo)記依次壓入棧;第一資源標(biāo)記彈出模塊,用于當(dāng)所述任務(wù)釋放所述資源時,將所述資源標(biāo) 記壓入模塊壓入棧中的所述資源標(biāo)記從棧中彈出;第一比較模塊,用于當(dāng)所述第一資源標(biāo)記模塊彈出資源標(biāo)記時,比較所述一致。本發(fā)明的實(shí)施例檢測死鎖的方法和裝置,為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲取資源 時,將所獲資源的資源標(biāo)記依次壓入棧,當(dāng)任務(wù)釋放資源時,將資源標(biāo)記從棧中彈出,通過比較所釋放資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一 致來檢測是否發(fā)生任務(wù)死鎖。與現(xiàn)有技術(shù)相比,本發(fā)明檢測死鎖的方法能夠在 任務(wù)釋放資源的時候,及時發(fā)現(xiàn)任務(wù)死鎖,提高了軟件的可靠性。另一方面,本發(fā)明的實(shí)施例提供另外一種檢測死鎖的方法和裝置,能夠檢 測出程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例檢測死鎖的方法采用以下技術(shù)方案一種^f全測死鎖的方法,包括為任務(wù)設(shè)置棧;將所述任務(wù)所獲的資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取 時間;設(shè)置所述資源標(biāo)記的存棧時間閾值; 根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時間; 將所述存棧時間與所述存棧時間閾值相比較,若存棧時間大于存棧時間閾 值,則判定發(fā)生死鎖。本發(fā)明的實(shí)施例檢測死鎖的裝置釆用以下技術(shù)方案 一種檢測死鎖的裝置,包括 棧設(shè)置模塊,用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊,用于當(dāng)棧設(shè)置模塊為任務(wù)設(shè)置棧后,將所述任務(wù)所獲 的資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取時間;時間閾值設(shè)置模塊,用于設(shè)置資源標(biāo)記的存棧時間閾值;存棧時間獲取模塊,用于根據(jù)所述資源標(biāo)記壓入模塊壓入棧中的資源標(biāo)記 中的資源的獲取時間與當(dāng)前的檢測時間獲取存棧時間;第二比較模塊,用于將所述存棧時間獲取模塊獲取的存棧時間與所述時間閾值設(shè)置模塊設(shè)置的存棧時間閾值相比較。本發(fā)明的實(shí)施例檢測死鎖的方法和裝置,為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲取資源時,將所獲資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取時間;設(shè)置 資源標(biāo)記的存棧時間閾值,根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時 間,通過比較所述存棧時間與所述存棧時間閾值來檢測是否發(fā)生任務(wù)死鎖。與 現(xiàn)有技術(shù)相比,本發(fā)明檢測死鎖的方法能夠及時發(fā)現(xiàn)任務(wù)死鎖,提高了軟件的 可靠性。再一方面,本發(fā)明的實(shí)施例提供一種解除死鎖的方法和裝置,該方法能夠 解除程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例解除死鎖的方法采用以下技術(shù)方案一種解除死鎖的方法,包括停止任務(wù)運(yùn)行;確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置; 將死鎖位置以上的資源標(biāo)記,從棧中彈出并保存; 將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源; 將保存的資源標(biāo)記壓回棧。本發(fā)明的實(shí)施例解除死鎖的裝置采用以下技術(shù)方案 一種解除死鎖的裝置,包括任務(wù)停止模塊,用于當(dāng)檢測到任務(wù)發(fā)生死鎖時停止任務(wù)運(yùn)行; 死鎖位置確定模塊,用于當(dāng)所述任務(wù)停止模塊停止任務(wù)運(yùn)行后確定發(fā)生死 鎖的資源標(biāo)記的位置,作為死鎖位置;第二資源標(biāo)記彈出模塊,用于將所述死鎖位置確定模塊確定的死鎖位置以上的資源標(biāo)記,從棧中彈出并保存;資源釋放模塊,用于當(dāng)所述第二資源標(biāo)記彈出模塊完成彈出和保存操作后, 將所述死鎖位置確定模塊確定的發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源;資源標(biāo)記壓回模塊,用于當(dāng)所述資源釋放模塊釋放死鎖的資源后將保存的 資源標(biāo)記壓回棧。本發(fā)明的實(shí)施例解除死鎖的方法和裝置,發(fā)生任務(wù)死鎖后,首先停止任務(wù) 的運(yùn)行,確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置;然后,將死鎖位置 以上的資源標(biāo)記從棧中彈出并保存;接著,將發(fā)生死鎖的資源標(biāo)記彈出,并釋 放該發(fā)生死鎖的資源;最后,將保存的資源標(biāo)記壓回棧。與現(xiàn)有技術(shù)相比,本 發(fā)明解除死鎖的方法能夠在發(fā)生任務(wù)死鎖后停止任務(wù)的運(yùn)行,將發(fā)生死鎖的資 源一步步釋放掉,避免了軟件運(yùn)行狀態(tài)的進(jìn)一步惡化,提高了軟件的可靠性。再一方面,本發(fā)明的實(shí)施例提供一種檢測和解除死鎖的系統(tǒng),能夠檢測和 解除程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例檢測和解除死鎖的系統(tǒng)采用以下技術(shù)方案一種檢測和解除死鎖的系統(tǒng),包括死鎖檢測裝置,用于檢測任務(wù)死鎖;死鎖解除裝置,用于當(dāng)所述死鎖檢測模塊檢測到任務(wù)死鎖后,解除任務(wù)死鎖。本發(fā)明的實(shí)施例檢測和解除死鎖的系統(tǒng),能夠?qū)θ蝿?wù)發(fā)生的死鎖現(xiàn)象進(jìn)行 檢測,在檢測到任務(wù)死鎖后,停止任務(wù)的運(yùn)行,將發(fā)生死鎖的資源一步步釋放 掉,避免了軟件運(yùn)行狀態(tài)的進(jìn)一步惡化,提高了軟件的可靠性。


      為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述 中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付 出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖l為本發(fā)明實(shí)施例提供的檢測死鎖的方法流程圖; 圖2為本發(fā)明提供的檢測死鎖的方法實(shí)施例 一流程圖; 圖3為本發(fā)明實(shí)施例提供的檢測死鎖的裝置結(jié)構(gòu)示意圖; 圖4為本發(fā)明實(shí)施例提供的檢測死鎖的方法流程圖; 圖5為本發(fā)明提供的檢測死鎖的方法實(shí)施例二流程圖; 圖6為本發(fā)明實(shí)施例提供的檢測死鎖的裝置結(jié)構(gòu)示意圖; 圖7為本發(fā)明實(shí)施例提供的解除死鎖的方法流程圖; 圖8為本發(fā)明提供的解除死鎖的方法實(shí)施例三流程圖; 圖9為本發(fā)明實(shí)施例提供的解除死鎖的裝置結(jié)構(gòu)示意圖; 圖IO為本發(fā)明實(shí)施例提供的;f企測和解除死鎖的系統(tǒng)結(jié)構(gòu)示意圖。
      具體實(shí)施方式
      下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清 楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是 全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造 性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明的實(shí)施例提供一種檢測和解除死鎖的方法、裝置和系統(tǒng)。下面結(jié)合附圖和實(shí)施例對本發(fā)明作詳細(xì)說明。本發(fā)明的實(shí)施例提供一種檢測死鎖的方法,該方法能夠檢測出程序中出現(xiàn) 的死鎖現(xiàn)象,提高軟件的可靠性。 如圖1所示,所述方法包括SI01:為任務(wù)設(shè)置棧;SI02:將所述任務(wù)所獲的資源的資源標(biāo)記依次壓入棧;S103:當(dāng)所述任務(wù)釋放所述資源時,將壓入棧的所述資源標(biāo)記從棧中彈出;S104:比較所述任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記 是否一致,若不一致,則判定發(fā)生死鎖。本發(fā)明的實(shí)施例檢測死鎖的方法,為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲取資源時,將 所獲資源的資源標(biāo)記依次壓入棧,當(dāng)任務(wù)釋放資源時,將資源標(biāo)記從棧中彈出,是否發(fā)生任務(wù)死鎖。與現(xiàn)有技術(shù)相比,本發(fā)明檢測死鎖的方法能夠在任務(wù)釋放 資源的時候,及時發(fā)現(xiàn)任務(wù)死鎖,提高了軟件的可靠性。 下面給出本發(fā)明檢測死鎖的方法具體實(shí)施例一以軟件中兩個并行的任務(wù)1和任務(wù)2為例,如圖2所示,所述檢測死鎖的方法 具體包括S201:為任務(wù)1和任務(wù)2各設(shè)置一個棧,任務(wù)1獲取資源A和資源B,任務(wù)2獲 取資源C和資源D,資源A、 B、 C、 D的資源標(biāo)記分別為a、 b、 c、 d;其中,與任務(wù)l對應(yīng)的為棧l,與任務(wù)2對應(yīng)的為棧2。所述棧用于存儲任務(wù) 所獲資源的資源標(biāo)記,每個資源有一個唯一標(biāo)識該資源的資源標(biāo)記。其中,獲取所述四個資源的時間先后順序?yàn)橘Y源A、資源B、資源C和資源 D。每個資源與所述資源的資源標(biāo)記存在——對應(yīng)的關(guān)系,在本實(shí)施例中,所述 資源A、資源B、資源C、資源D的資源標(biāo)記分別為a、 b、 c、 d。在其它實(shí)施例中, 資源A、資源B、資源C、資源D的資源標(biāo)記可以用其它字母或數(shù)字標(biāo)識。S202:將資源標(biāo)記a、 b、 c、 d依次壓入棧;其中,所述資源標(biāo)記包括資源在內(nèi)存中的地址和資源的獲取時間,不同的資源對應(yīng)不同的資源標(biāo)記,由資源的名稱可以得知該資源的資源標(biāo)記,也即該資源在內(nèi)存中的地址和獲取時間。按照步驟S201中獲取資源的先后順序,將資 源A的資源標(biāo)記a、資源B的資源標(biāo)記b,依次壓入棧l;將資源C的資源標(biāo)記c、資 源D的資源標(biāo)記d,依次壓入棧2。S203:任務(wù)釋放資源X時,從棧中彈出資源標(biāo)記x;當(dāng)任務(wù)釋放資源時,從棧中彈出一個資源標(biāo)記x,其中x可能為a、 b、 c、 d 中的任一個。其中,所述資源標(biāo)記彈出棧的順序可以進(jìn)行設(shè)置,可以與壓入棧 的順序相同,也可以與壓入棧的順序相反。在本實(shí)施例中,將資源標(biāo)記彈出棧 的順序設(shè)置為與壓入棧的順序相反。即資源標(biāo)記彈出棧的順序?yàn)橘Y源標(biāo)記d、資源標(biāo)記c、資源標(biāo)記b、資源 標(biāo)記a。S204:比較所述任務(wù)釋放的資源X的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記 x是否一致,若不一致,則判定發(fā)生死鎖。由于資源與資源標(biāo)記存在一一對應(yīng)的關(guān)系,當(dāng)釋放資源時,只要知道所釋 放的資源的名稱,即可得知該資源的資源標(biāo)記。例如,當(dāng)釋放的資源為資源A時, 由該資源的名稱A即可得知該資源A的資源標(biāo)記為資源標(biāo)記a。其中,資源標(biāo)記彈出棧的順序是固定的,而釋放資源的順序可以是隨機(jī)的, 對于本實(shí)施例來說,在釋放資源時,比較所釋放資源X的資源標(biāo)記與從棧中彈出 的資源標(biāo)記x是否一致,也就是比較所釋放資源X在內(nèi)存中的地址和獲取時間與 從棧中彈出的資源標(biāo)記x所包括的地址和獲取時間是否 一致。例如當(dāng)釋放的資源為資源A時,從棧中彈出一個資源標(biāo)記,由于資源A的記a所包括的地址和獲取時間,若不一致,則發(fā)生任務(wù)死鎖。因而,利用本發(fā)明的實(shí)施例檢測死鎖的方法,在任務(wù)釋放資源的時候,能 夠檢測出程序中出現(xiàn)的死鎖現(xiàn)象,提高了軟件的可靠性。與上述檢測死鎖的方法相對應(yīng),本發(fā)明的實(shí)施例還提供一種檢測死鎖的裝 置,該裝置能夠檢測出程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。如圖3所示,所述檢測死鎖的裝置包括棧設(shè)置模塊301、資源標(biāo)記壓入模 塊302、第一資源標(biāo)記彈出模塊303及第一比較模塊304。在本實(shí)施例中,棧設(shè)置模塊301用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊302 用于當(dāng)所述棧設(shè)置模塊301為任務(wù)設(shè)置棧后,將所述任務(wù)所獲的資源的資源標(biāo)記 依次壓入棧;第一資源標(biāo)記彈出模塊303用于當(dāng)所述任務(wù)釋放所述資源時,將所 述資源標(biāo)記壓入模塊302壓入棧中的所述資源標(biāo)記從棧中彈出;第一比較模塊 304用于當(dāng)所述第一資源標(biāo)記模塊303彈出資源標(biāo)記時,比較所述任務(wù)釋放的資 源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一致。本發(fā)明的實(shí)施例檢測死鎖的裝置,棧設(shè)置模塊301為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲 取資源時,資源標(biāo)記壓入模塊302將所獲資源的資源標(biāo)記依次壓入棧,當(dāng)任務(wù)釋 放資源時,第一資源標(biāo)記彈出模塊303將資源標(biāo)記從棧中彈出,第一比較模塊304測是否發(fā)生任務(wù)死鎖。與現(xiàn)有技術(shù)相比,本發(fā)明檢測死鎖的裝置能夠在任務(wù)釋 放資源的時候,及時發(fā)現(xiàn)任務(wù)死鎖,提高了軟件的可靠性。如圖3所示,所述檢測死鎖的裝置還包括第一判斷模塊305,用于根據(jù)所述 第一比較模塊304的比較結(jié)果,判斷是否發(fā)生死鎖,若所釋放資源的資源標(biāo)記與 所述從棧中彈出的資源標(biāo)記不一致,則判定發(fā)生死鎖。對于本實(shí)施例檢測死鎖的裝置,所述資源標(biāo)記彈出棧的順序與壓入棧的順 序相同或相反;所述資源標(biāo)記包括資源的地址和資源的獲取時間,不同的資源對應(yīng)不同的資源標(biāo)記。所述第一比較模塊305,通過比較所釋放資源的地址和獲取時間與從棧中彈 出的資源標(biāo)記中包括的地址和獲取時間是否一致,來比較所述任務(wù)釋放的資源 的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一致。因而,利用本發(fā)明的實(shí)施例檢測死鎖的裝置,能夠檢測出程序中出現(xiàn)的死 鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例提供另外一種檢測死鎖的方法,該方法能夠檢測出程序中 出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。如圖4所示,所述方法包括S401:為任務(wù)設(shè)置棧;S402:將所述任務(wù)所獲的資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源 的獲取時間;S403:設(shè)置資源標(biāo)記的存棧時間閾值;S404:根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時間; S405:將所述存棧時間與所述存棧時間閾值相比較,若存棧時間大于存棧 時間閾值,則判定發(fā)生死鎖。本發(fā)明的實(shí)施例檢測死鎖的方法,為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲取資源時,將 所獲資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取時間;設(shè)置資源標(biāo) 記的存棧時間閾值,根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時間,通術(shù)相比,本發(fā)明檢測死鎖的方法能夠及時發(fā)現(xiàn)任務(wù)死鎖,提高了軟件的可靠性。 下面給出本發(fā)明檢測死鎖的方法具體實(shí)施例二 以軟件中兩個并行的任務(wù)3和任務(wù)4為例,如圖5所示,所述4企測死鎖的方法具體包括S501:為任務(wù)3和任務(wù)4各設(shè)置一個棧,任務(wù)3獲取資源P和資源Q,任務(wù)4獲 取資源U和資源V,資源P、 Q、 U、 V的資源標(biāo)記分別為p、 q、 u、 v;其中,與任務(wù)3對應(yīng)的為棧3,與任務(wù)4對應(yīng)的為棧4。所述棧用于存儲任務(wù) 所獲資源的資源標(biāo)記。其中,獲^f又所述四個資源的時間先后順序?yàn)橘Y源P、資源Q、資源U和資源 V。每個資源與所述資源的資源標(biāo)記存在——對應(yīng)的關(guān)系,在本實(shí)施例中,所述 資源P、資源Q、資源U、資源V的資源標(biāo)記分別為p、 q、 u、 v。在其它實(shí)施例中, 資源P、資源Q、資源U、資源V的資源標(biāo)記可以用其它字母或數(shù)字標(biāo)識。S502:將資源標(biāo)記p、 q、 u、 v依次壓入棧;其中,所述資源標(biāo)記包括資源在內(nèi)存中的地址和資源的獲取時間,不同的 資源對應(yīng)不同的資源標(biāo)記。按照步驟S501中獲取資源的先后順序,將資源P和資 源Q的獲取時間分別作為一個標(biāo)記包依次壓入棧3,將資源U和資源V的獲取時間 分別作為一個標(biāo)記包依次壓入棧4。將資源P的資源標(biāo)記p、資源Q的標(biāo)記q,依次 壓入棧3;將資源U的資源標(biāo)記u、資源V的資源標(biāo)記v,依次壓入棧4。S503:設(shè)置資源標(biāo)記p、 q、 u、 v的存棧時間閾值TO;對于每個資源標(biāo)記來說,在棧中的停留時間有一個最大臨界值。沒有發(fā)生 任務(wù)死鎖時,資源標(biāo)記在棧中停留的時間在達(dá)到該臨界值之前,將會從棧中彈 出。將該臨界值設(shè)為資源標(biāo)記的存棧時間闊值TO,每個資源標(biāo)記的存棧時間閾 值T0不同。S504:將當(dāng)前的檢測時間與資源的獲取時間相比較,得出兩者的時間差值, 即為存棧時間T;S505:將所述存棧時間T與所述時間閾值TO相比較,若存棧時間T大于時間閾值TO,則判定發(fā)生死鎖。將所述資源標(biāo)記的存棧時間T與所述時間閾值TO相比較,若存棧時間T大于 所述時間閾值TO,則說明有資源長時間得不到釋^t,該資源對應(yīng)的資源標(biāo)記長 時間在棧中存放,發(fā)生了任務(wù)死鎖。對于上述;f企測死鎖的方法來說,當(dāng)任務(wù)只獲取一個資源時,同樣能夠-使用 所述方法進(jìn)行死鎖的檢測。因而,利用本發(fā)明的實(shí)施例檢測死鎖的方法,能夠檢測出程序中出現(xiàn)的死 鎖現(xiàn)象,提高軟件的可靠性。與上述檢測死鎖的方法相對應(yīng),本發(fā)明的實(shí)施例還提供一種檢測死鎖的裝 置,該裝置能夠檢測出程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。如圖6所示,所述檢測死鎖的裝置包括棧設(shè)置模塊601,資源標(biāo)記壓入模 塊602,時間闞值設(shè)置模塊603,存棧時間獲取模塊604及第二比較模塊605。在本實(shí)施例中,棧設(shè)置模塊601用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊602 用于當(dāng)棧設(shè)置模塊601為任務(wù)設(shè)置棧后,將所述任務(wù)所獲的資源的資源標(biāo)記壓入 棧,所述資源標(biāo)記包括資源的獲取時間;時間閾值設(shè)置模塊603用于設(shè)置資源標(biāo) 記的存棧時間閾值;存棧時間獲取才莫塊604用于根據(jù)所述資源標(biāo)記壓入模塊602 壓入棧中的資源標(biāo)記中的資源的獲取時間與當(dāng)前的檢測時間獲M棧時間;第 二比較模塊605用于將所述存棧時間獲取模塊604獲取的存棧時間與所述時間閾 值設(shè)置模塊603設(shè)置的存棧時間閾值相比較。本發(fā)明的實(shí)施例檢測死鎖的裝置,棧設(shè)置模塊601為任務(wù)設(shè)置棧,當(dāng)任務(wù)獲 取資源時,資源標(biāo)記壓入模塊602將所獲資源的資源標(biāo)記依次壓入棧,所述資源 標(biāo)記包括資源的獲取時間;時間閾值設(shè)置模塊603設(shè)置資源標(biāo)記的存棧時間閾 值,存棧時間獲取模塊604根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時間,由第二比較模塊605通過比較所述存棧時間與所述存棧時間閾值,來檢測是 否發(fā)生任務(wù)死鎖。與現(xiàn)有技術(shù)相比,本發(fā)明檢測死鎖的裝置能夠及時發(fā)現(xiàn)任務(wù) 死鎖,提高了軟件的可靠性。其中,所述存棧時間獲取模塊604,通過將當(dāng)前的檢測時間與資源的獲取時 間相比較,得出兩者的時間差值,即為所述存棧時間。如圖6所示,所述檢測死鎖的裝置還包括第二判斷模塊606,用于根據(jù)所述 第二比較模塊605的比較結(jié)果,判斷是否發(fā)生死鎖,若所述存棧時間大于所述存 棧時間閾值,則判定發(fā)生死鎖。因而,利用本發(fā)明的實(shí)施例檢測死鎖的裝置,能夠檢測出程序中出現(xiàn)的死 鎖現(xiàn)象,提高軟件的可靠性。本發(fā)明的實(shí)施例還提供一種解除死鎖的方法,該方法能夠解除程序中出現(xiàn) 的死鎖現(xiàn)象,提高軟件的可靠性。如圖7所示,所述方法包括S701:停止任務(wù)運(yùn)行;S702:確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置; S703:將死鎖位置以上的資源標(biāo)記,從棧中彈出并保存; S704:將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源; S705:將保存的資源標(biāo)記壓回棧。本發(fā)明的實(shí)施例解除死鎖的方法,發(fā)生任務(wù)死鎖后,首先停止任務(wù)的運(yùn)行, 確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置;然后,將死鎖位置以上的資 源標(biāo)記從棧中彈出并保存;接著,將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生 死鎖的資源;最后,將保存的資源標(biāo)記壓回棧。與現(xiàn)有技術(shù)相比,本發(fā)明解除 死鎖的方法能夠在發(fā)生任務(wù)死鎖后停止任務(wù)的運(yùn)行,將發(fā)生死鎖的資源一步步釋放掉,避免了軟件運(yùn)行狀態(tài)的進(jìn)一步惡化,提高了軟件的可靠性。
      其中,所述解除死鎖的方法,可以在4企測到死鎖之后進(jìn)行,也可以不用進(jìn) 行死鎖的檢測,在發(fā)生死鎖后直接進(jìn)行。
      下面給出本發(fā)明檢測死鎖的方法具體實(shí)施例三
      如圖8所示,首先檢測是否發(fā)生任務(wù)死鎖,若檢測到任務(wù)死鎖,則所述方法 具體包括如下步驟
      S801:停止任務(wù)運(yùn)行;
      為了讓發(fā)生死鎖的任務(wù)恢復(fù)運(yùn)行,就需要解除死鎖,也就是將長期被占用 的資源釋放掉。由于在復(fù)雜的并發(fā)環(huán)境中,多任務(wù)的運(yùn)行有可能導(dǎo)致混亂,另 外釋放資源需要對棧進(jìn)行調(diào)整,在調(diào)整的過程中也不能被打斷。因此,需要讓 所有的任務(wù)停止運(yùn)行,才能進(jìn)行釋放資源和調(diào)整棧的工作。
      為了達(dá)到上述目的,引入一個安全資源。所述安全資源在每個任務(wù)中的安 全位置放置,該安全位置為任務(wù)中某個固定位置,在該安全位置沒有其他資源 被獲取。正常工作時,所述安全資源被各任務(wù)獲取后就立即釋放,不會影響任 務(wù)的正常工作。
      當(dāng)監(jiān)控任務(wù)檢測到死鎖時,就申請?jiān)摪踩Y源,并等待一段時間,其他任 務(wù)執(zhí)行到該安全位置時,申請不到該安全資源,將會停止運(yùn)行。 S802:確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置; 4企測到任務(wù)發(fā)生死鎖后,找出棧中發(fā)生死鎖的資源標(biāo)記的位置,并將該位 置設(shè)為死鎖位置。
      S803:將死鎖位置以上的資源標(biāo)記,從棧中彈出并保存; 所述死鎖位置以上的資源標(biāo)記,不包括發(fā)生死鎖的資源標(biāo)記。 S804:將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源;S805:將保存的資源標(biāo)記壓回棧;
      將步驟S8 0 3中保存的資源標(biāo)記按照原順序重新壓回棧中。 S806:恢復(fù)任務(wù)運(yùn)行。
      監(jiān)控任務(wù)釋放掉安全鎖,其他任務(wù)恢復(fù)運(yùn)行。
      若任務(wù)恢復(fù)運(yùn)行后仍檢測有任務(wù)死鎖,則重復(fù)步驟S801-S806,直至沒有任 務(wù)死鎖發(fā)生。
      其中,對于上述兩種4企測死鎖的方法所檢測出的死鎖,本發(fā)明解除死鎖的 方法均適用。
      因而,利用本發(fā)明的實(shí)施例解除死鎖的方法,能夠解除程序中出現(xiàn)的死鎖 現(xiàn)象,提高軟件的可靠性。
      與上述解除死鎖的方法相對應(yīng),本發(fā)明的實(shí)施例還提供一種解除死鎖的裝 置,該裝置能夠解除程序中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。
      如圖9所示,所述解除死鎖的裝置包括任務(wù)停止模塊901、死鎖位置確定模 塊902、第二資源標(biāo)記彈出模塊903、資源釋放模塊904及資源標(biāo)記壓回模塊905。
      在本實(shí)施例中,任務(wù)停止模塊901用于當(dāng)檢測到任務(wù)發(fā)生死鎖時停止任務(wù)運(yùn) 行;死鎖位置確定模塊902用于當(dāng)所述任務(wù)停止模塊901停止任務(wù)運(yùn)行后確定發(fā) 生死鎖的資源標(biāo)記的位置,作為死鎖位置;第二資源標(biāo)記彈出模塊903用于將所 述死鎖位置確定模塊902確定的死鎖位置以上的資源標(biāo)記,從棧中彈出并保存; 資源釋放模塊904用于當(dāng)所述第二資源標(biāo)記彈出模塊903完成彈出和保存操作 后,將所述死鎖位置確定模塊902確定的發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā) 生死鎖的資源;資源標(biāo)記壓回模塊905用于當(dāng)所述資源釋放才莫塊904釋^:死鎖的 資源后將保存的資源標(biāo)記壓回棧。
      本發(fā)明的實(shí)施例解除死鎖的裝置,發(fā)生任務(wù)死鎖后,任務(wù)停止模塊901停止任務(wù)的運(yùn)行,死鎖位置確定^f莫塊902確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖 位置,第二資源標(biāo)記彈出模塊903將死鎖位置以上的資源標(biāo)記從棧中彈出并保 存,資源釋放模塊904將發(fā)生死鎖的資源標(biāo)記彈出,并釋^L該發(fā)生死鎖的資源, 資源標(biāo)記壓回^f莫塊905將保存的資源標(biāo)記壓回棧。與現(xiàn)有^^支術(shù)相比,本發(fā)明解除 死鎖的裝置能夠在發(fā)生任務(wù)死鎖后停止任務(wù)的運(yùn)行,將發(fā)生死鎖的資源一步步 釋放掉,避免了軟件運(yùn)行狀態(tài)的進(jìn)一步惡化,提高了軟件的可靠性。
      如圖9所示,所述裝置還包括任務(wù)恢復(fù)^^莫塊906,用于當(dāng)所述資源標(biāo)記壓回 模塊905將保存的資源標(biāo)記壓回棧后,恢復(fù)任務(wù)運(yùn)行。
      因而,利用本發(fā)明的實(shí)施例解除死鎖的裝置,能夠解除程序中出現(xiàn)的死鎖 現(xiàn)象,提高軟件的可靠性。
      本發(fā)明的實(shí)施例還提供一種^r測和解除死鎖的系統(tǒng),該系統(tǒng)能夠解除程序 中出現(xiàn)的死鎖現(xiàn)象,提高軟件的可靠性。
      如圖10所示,所述系統(tǒng)包括
      死鎖檢測裝置IOOI,用于檢測任務(wù)死鎖;
      死鎖解除裝置1002,用于當(dāng)所述死鎖檢測裝置1001檢測到任務(wù)死鎖后,解 除任務(wù)死鎖。
      本發(fā)明的實(shí)施例檢測和解除死鎖的系統(tǒng),能夠?qū)θ蝿?wù)發(fā)生的死鎖現(xiàn)象進(jìn)行 檢測,在檢測到任務(wù)死鎖后,停止任務(wù)的運(yùn)行,將發(fā)生死鎖的資源一步步釋放 掉,避免了軟件運(yùn)行狀態(tài)的進(jìn)一步惡化,提高了軟件的可靠性。
      本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程, 是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算 機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。 其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random Access Memory, RAM)等。
      以上所述,僅為本發(fā)明實(shí)施例的具體實(shí)施方式
      ,但本發(fā)明實(shí)施例的保護(hù)范 圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍 內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本 發(fā)明實(shí)施例的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
      權(quán)利要求
      1. 一種檢測死鎖的方法,其特征在于,包括為任務(wù)設(shè)置棧;將所述任務(wù)所獲的資源的資源標(biāo)記依次壓入棧;當(dāng)所述任務(wù)釋放所述資源時,將壓入棧中的所述資源標(biāo)記從棧中彈出;比較所述任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一致,若不一致,則判定發(fā)生死鎖。
      2、 根據(jù)權(quán)利要求l所述的檢測死鎖的方法,其特征在于,所述資源標(biāo)記彈 出棧的順序與壓入棧的順序相同或相反。
      3、 根據(jù)權(quán)利要求2所述的檢測死鎖的方法,其特征在于,所述資源標(biāo)記包 括資源的地址和資源的獲取時間。
      4、 根據(jù)權(quán)利要求3所述的檢測死鎖的方法,其特征在于,所述比較所述任 務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否 一致的步驟包括括的地址和獲取時間是否 一致。
      5、 一種檢測死鎖的裝置,其特征在于,包括 棧設(shè)置模塊,用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊,用于當(dāng)所述棧設(shè)置模塊為任務(wù)設(shè)置棧后,將所述任務(wù) 所獲的資源的資源標(biāo)記依次壓入棧;第一資源標(biāo)記彈出模塊,用于當(dāng)所述任務(wù)釋放所述資源時,將所述資源標(biāo) 記壓入模塊壓入棧中的所述資源標(biāo)記從棧中彈出;第一比較模塊,用于當(dāng)所述第一資源標(biāo)記模塊彈出資源標(biāo)記時,比較所述 任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否 一致。
      6、 根據(jù)權(quán)利要求5所述的檢測死鎖的裝置,其特征在于,還包括第一判斷模塊,用于根據(jù)所述第一比較模塊的比較結(jié)果,判斷是否發(fā)生死 則判定發(fā)生死鎖。
      7、 根據(jù)權(quán)利要求5所迷的檢測死鎖的裝置,其特征在于,所述資源標(biāo)記彈 出棧的順序與壓入棧的順序相同或相反。
      8、 根據(jù)權(quán)利要求7所述的檢測死鎖的裝置,其特征在于,所述資源標(biāo)記包 括資源的地址和資源的獲耳又時間。
      9、 根據(jù)權(quán)利要求7所述的檢測死鎖的裝置,其特征在于,所述第一比較模中包括的地址和獲取時間是否一致,來比較所述任務(wù)釋放的資源的資源標(biāo)記與 所述從棧中彈出的資源標(biāo)記是否一致。
      10、 一種檢測死鎖的方法,其特征在于,包括 為任務(wù)設(shè)置棧;將所述任務(wù)所獲的資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取 時間;設(shè)置所述資源標(biāo)記的存棧時間閾值; 根據(jù)當(dāng)前的檢測時間與資源的獲取時間獲取存棧時間; 將所述存棧時間與所述存棧時間閾值相比較,若存棧時間大于存棧時間閾 值,則判定發(fā)生死鎖。
      11、 根據(jù)權(quán)利要求10所述的檢測死鎖的方法,其特征在于,根據(jù)當(dāng)前的檢 測時間與資源的獲取時間獲取存棧時間的步驟包括將當(dāng)前的檢測時間與資源的獲取時間相比較,得出兩者的時間差值,即為 所述存棧時間。
      12、 一種檢測死鎖的裝置,其特征在于,包括 棧設(shè)置模塊,用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊,用于當(dāng)棧設(shè)置模塊為任務(wù)設(shè)置棧后,將所述任務(wù)所獲 的資源的資源標(biāo)記壓入棧,所述資源標(biāo)記包括資源的獲取時間;時間閾值設(shè)置模塊,用于設(shè)置資源標(biāo)記的存棧時間閾值;存棧時間獲取模塊,用于根據(jù)所述資源標(biāo)記壓入模塊壓入棧中的資源標(biāo)記 中的資源的獲取時間與當(dāng)前的檢測時間獲取存棧時間;第二比較模塊,用于將所述存棧時間獲取模塊獲取的存棧時間與所述時間 閾值設(shè)置模塊設(shè)置的存棧時間閾值相比較。
      13、 根據(jù)權(quán)利要求12所述的檢測死鎖的裝置,其特征在于,還包括 第二判斷模塊,用于根據(jù)所述第二比較^t塊的比較結(jié)果,判斷是否發(fā)生死鎖,若所述存棧時間大于所述存棧時間閾值,則判定發(fā)生死鎖。
      14、 根據(jù)權(quán)利要求12所述的檢測死鎖的裝置,其特征在于,所述存棧時間 獲取模塊,通過將當(dāng)前的檢測時間與資源的獲取時間相比較,得出兩者的時間 差值,即為所述存棧時間。
      15、 一種解除死鎖的方法,其特征在于,包括 停止任務(wù)運(yùn)行;確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置; 將死鎖位置以上的資源標(biāo)記,從棧中彈出并保存; 將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源; 將保存的資源標(biāo)記壓回棧。
      16、 根據(jù)權(quán)利要求15所述的解除死鎖的方法,其特征在于,在所述將保存 的資源標(biāo)記壓回棧的步驟之后,還包括恢復(fù)任務(wù)運(yùn)行。
      17、 一種解除死鎖的裝置,其特征在于,包括 任務(wù)停止模塊,用于當(dāng)檢測到任務(wù)發(fā)生死鎖時停止任務(wù)運(yùn)行; 死鎖位置確定模塊,用于當(dāng)所述任務(wù)停止模塊停止任務(wù)運(yùn)行后確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置;第二資源標(biāo)記彈出模塊,用于將所述死鎖位置確定模塊確定的死鎖位置以上的資源標(biāo)記,從棧中彈出并保存;資源釋放模塊,用于當(dāng)所述第二資源標(biāo)記彈出模塊完成彈出和保存操作后, 將所述死鎖位置確定模塊確定的發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖 的資源;資源標(biāo)記壓回模塊,用于當(dāng)所述資源釋放模塊釋放死鎖的資源后將保存的 資源標(biāo)記壓回棧。
      18、 根據(jù)權(quán)利要求17所述的解除死鎖的裝置,其特征在于,還包括 任務(wù)恢復(fù)模塊,用于當(dāng)所述資源標(biāo)記壓回模塊將保存的資源標(biāo)記壓回棧后,恢復(fù)任務(wù)運(yùn)行。
      19、 一種;f企測和解除死鎖的系統(tǒng),其特征在于,包括 死鎖檢測裝置,用于檢測任務(wù)死鎖;死鎖解除裝置,用于當(dāng)所述死鎖檢測裝置檢測到任務(wù)死鎖后,解除任務(wù)死鎖。
      20、 根據(jù)權(quán)利要求19所述的檢測和解除死鎖的系統(tǒng),其特征在于,所述死 鎖檢測裝置包括棧設(shè)置模塊,用于為任務(wù)設(shè)置棧;資源標(biāo)記壓入模塊,用于當(dāng)所述棧設(shè)置模塊為任務(wù)設(shè)置棧后,將所述任務(wù)所獲的資源的資源標(biāo)記依次壓入棧;第一資源標(biāo)記彈出模塊,用于當(dāng)所述任務(wù)釋放所述資源時,將所述資源標(biāo) 記壓入模塊壓入棧中的所述資源標(biāo)記從棧中彈出;第一比較模塊,用于當(dāng)所述第一資源標(biāo)記模塊彈出資源標(biāo)記時,比較所述 任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否 一致;第一判斷模塊,用于根據(jù)所述第一比較模塊的比較結(jié)果,判斷是否發(fā)生死 鎖,若所述任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記不一致, 則判定發(fā)生死鎖。
      21、 根據(jù)權(quán)利要求20所述的檢測和解除死鎖的系統(tǒng),其特征在于,所述資源 標(biāo)記包括資源的地址和資源的獲耳又時間。
      22、 根據(jù)權(quán)利要求21所述的檢測和解除死鎖的系統(tǒng),其特征在于,所述死 鎖檢測裝置還包括時間閾值設(shè)置模塊,用于設(shè)置資源標(biāo)記的存棧時間閾值;存棧時間獲取;漠塊,用于4艮據(jù)所述資源標(biāo)記壓入模塊壓入棧中的資源標(biāo)記 中的資源的獲取時間與當(dāng)前的檢測時間獲取存棧時間;第二比較模塊,用于將所述存棧時間獲取模塊獲取的存棧時間與所述時間 閾值設(shè)置模塊設(shè)置的存棧時間閾值相比較;第二判斷模塊,用于根據(jù)所述第二比較模塊的比較結(jié)果,判斷是否發(fā)生死 鎖,若所述存棧時間大于所述存棧時間閾值,則判定發(fā)生死鎖。
      全文摘要
      本發(fā)明實(shí)施例公開了一種檢測和解除死鎖的方法,所述檢測死鎖的方法包括為任務(wù)設(shè)置棧;將所述任務(wù)所獲的資源的資源標(biāo)記依次壓入棧;當(dāng)所述任務(wù)釋放所述資源時,將壓入棧中的所述資源標(biāo)記從棧中彈出;比較所述任務(wù)釋放的資源的資源標(biāo)記與所述從棧中彈出的資源標(biāo)記是否一致,若不一致,則判定發(fā)生死鎖。所述解除死鎖的方法包括停止任務(wù)運(yùn)行;確定發(fā)生死鎖的資源標(biāo)記的位置,作為死鎖位置;將死鎖位置以上的資源標(biāo)記,從棧中彈出并保存;將發(fā)生死鎖的資源標(biāo)記彈出,并釋放該發(fā)生死鎖的資源;將保存的資源標(biāo)記壓回棧。本發(fā)明實(shí)施例還提供一種檢測和解除死鎖的裝置和系統(tǒng),可以及時發(fā)現(xiàn)任務(wù)死鎖,并解除死鎖,提高了軟件的可靠性。
      文檔編號G06F9/46GK101295266SQ200810111538
      公開日2008年10月29日 申請日期2008年6月5日 優(yōu)先權(quán)日2008年6月5日
      發(fā)明者斌 梁 申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1