亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種并發(fā)分析的方法及裝置制造方法

文檔序號(hào):6504859閱讀:150來(lái)源:國(guó)知局
一種并發(fā)分析的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種并發(fā)分析的方法及裝置,涉及程序分析【技術(shù)領(lǐng)域】,在對(duì)PEG上不同節(jié)點(diǎn)間的并發(fā)分析過(guò)程中,簡(jiǎn)化了處理流程,提高了并發(fā)分析的效率。本發(fā)明的具體實(shí)施例包括:獲取PEG中的根節(jié)點(diǎn),將該根節(jié)點(diǎn)以及PEG中入度為0的節(jié)點(diǎn)壓入預(yù)設(shè)棧,并獲取該預(yù)設(shè)棧的棧頂節(jié)點(diǎn)組成待處理序列,進(jìn)而確定當(dāng)前處理節(jié)點(diǎn)在該待處理序列中的位置,并在待處理序列的該位置之后查找包含于工作集中的節(jié)點(diǎn),從而減少并發(fā)分析中的迭代次數(shù)。本發(fā)明實(shí)施例主要應(yīng)用于并發(fā)分析流程中。
【專利說(shuō)明】一種并發(fā)分析的方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及程序分析【技術(shù)領(lǐng)域】,尤其涉及一種并發(fā)分析的方法及裝置。

【背景技術(shù)】
[0002] 可能并發(fā)分析用于判斷給定的一個(gè)并發(fā)程序中的兩條語(yǔ)句是否可能在運(yùn)行時(shí)并 發(fā)執(zhí)行,其結(jié)果可以服務(wù)于其他類型的程序分析技術(shù)例如指針?lè)治?,也可服?wù)于并發(fā)程序 的編譯優(yōu)化,同時(shí)還可以服務(wù)于并發(fā)錯(cuò)誤的檢測(cè),比如說(shuō),如果預(yù)先知曉一個(gè)并發(fā)程序中的 哪些部分之間是可能并發(fā)的,則可以顯著減少數(shù)據(jù)競(jìng)爭(zhēng)這類錯(cuò)誤的誤報(bào)信息。所以說(shuō)可能 并發(fā)分析是并發(fā)程序分析領(lǐng)域中一類重要的程序分析方法。
[0003] 現(xiàn)有技術(shù)基于迭代數(shù)據(jù)流的方法進(jìn)行可能并發(fā)分析,在該分析方法中,根據(jù)不同 語(yǔ)句的并發(fā)語(yǔ)義為其定義相應(yīng)的數(shù)據(jù)流方程,之后在迭代過(guò)程中計(jì)算得到所有語(yǔ)句的可能 并發(fā)集合。具體的,該方法首先需要構(gòu)造并發(fā)程序的控制流圖,之后根據(jù)控制流圖構(gòu)造并發(fā) 執(zhí)行圖(Parallel Execution Graph,PEG),該并發(fā)執(zhí)行圖為控制流圖的程序表不。在PEG 上標(biāo)注含有不同并發(fā)語(yǔ)義的節(jié)點(diǎn)。并發(fā)語(yǔ)義包括線程創(chuàng)建,線程注銷以及線程間通信等等, 其中,線程創(chuàng)建的并發(fā)語(yǔ)義代表新的可能并發(fā)信息的產(chǎn)生,線程注銷的并發(fā)語(yǔ)義代表消除 已有的可能并發(fā)信息,線程間通信的并發(fā)語(yǔ)義代表線程間時(shí)序關(guān)系的存在。不同的并發(fā)語(yǔ) 義可定義不同的數(shù)據(jù)流方程。由于PEG基于并發(fā)控制流圖構(gòu)建,因此最終的分析結(jié)構(gòu)就轉(zhuǎn) 換為求解PEG上分屬不同線程的不同節(jié)點(diǎn)之間是否并發(fā)。在迭代過(guò)程中,以工作集的方式 保存PEG節(jié)點(diǎn)信息,每次迭代處理工作集中的一個(gè)節(jié)點(diǎn),按照預(yù)先定義的數(shù)據(jù)流方程計(jì)算 可能并發(fā)信息時(shí)會(huì)有新的節(jié)點(diǎn)加入。重復(fù)此過(guò)程,直到工作集為空,得到最終的分析結(jié)果。
[0004] 在實(shí)現(xiàn)上述現(xiàn)有技術(shù)的過(guò)程中,發(fā)明人發(fā)現(xiàn)至少存在如下問(wèn)題:在分析PEG上不 同節(jié)點(diǎn)之間是否并發(fā)的過(guò)程中,處理過(guò)程繁瑣,從而導(dǎo)致并發(fā)分析的效率低。


【發(fā)明內(nèi)容】

[0005] 本發(fā)明的實(shí)施例提供一種并發(fā)分析的方法及裝置,在對(duì)PEG上不同節(jié)點(diǎn)間進(jìn)行并 發(fā)分析的過(guò)程中,簡(jiǎn)化處理了過(guò)程,解決了并發(fā)分析效率低的問(wèn)題。
[0006]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0007] 第一方面,提供了一種并發(fā)分析的方法,包括:
[0008] 獲取由并發(fā)執(zhí)行圖PEG中的節(jié)點(diǎn)組成的待處理序列,所述待處理序列為減少所述 節(jié)點(diǎn)重復(fù)次數(shù)的嚴(yán)格拓?fù)湫蛄校?br> [0009] 根據(jù)預(yù)設(shè)規(guī)則對(duì)所述待處理序列中的節(jié)點(diǎn)進(jìn)行遍歷,所述預(yù)設(shè)規(guī)則用于尋找待遍 歷的節(jié)點(diǎn)。
[0010] 在第一方面的第一種可能實(shí)現(xiàn)方式中,所述獲取待處理序列包括:
[0011] 獲取所述PEG的根節(jié)點(diǎn),并將所述根節(jié)點(diǎn)壓入預(yù)設(shè)棧中,所述預(yù)設(shè)桟用于存儲(chǔ)所 述PEG中的根節(jié)點(diǎn)和/或所述PEG中入度為0的節(jié)點(diǎn);
[0012] 獲取所述預(yù)設(shè)棧的棧頂節(jié)點(diǎn),將所述棧頂節(jié)點(diǎn)加入所述待處理序列;
[0013] 獲取所述棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn),并在所述PEG中刪除所述棧頂節(jié)點(diǎn)與所述后繼節(jié) 點(diǎn)組成的邊。
[0014] 結(jié)合第一方面、第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第二中可能實(shí)現(xiàn) 方式中,獲取所述棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn),具體包括:
[0015] 當(dāng)確定所述棧頂節(jié)點(diǎn)為線程創(chuàng)建點(diǎn)時(shí),獲取并刪除所述棧頂節(jié)點(diǎn)先創(chuàng)建的線程的 首節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊,并將所述首節(jié)點(diǎn)壓入所述預(yù)設(shè)棧;
[0016] 當(dāng)確定所述棧頂節(jié)點(diǎn)不是線程創(chuàng)建點(diǎn)時(shí),獲取并刪除所述棧頂節(jié)點(diǎn)的所有后繼節(jié) 點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊,并將所述后繼節(jié)點(diǎn)中入度為〇的所述后繼節(jié)點(diǎn)壓入所述預(yù)設(shè) 棧中。
[0017] 結(jié)合第一方面或第一方面的第一種可能實(shí)現(xiàn)方式或第一方面的第二種可能實(shí)現(xiàn) 方式中任意一種實(shí)現(xiàn)方式,在第一方面的第三種可能實(shí)現(xiàn)方式中,還包括:
[0018] 為所述PEG中的線程設(shè)置并行層次,所述并行層次表示所述PEG中線程之間的關(guān) 系。
[0019] 結(jié)合第一方面、第一方面的第一種可能實(shí)現(xiàn)方式、第一方面的第二種可能實(shí)現(xiàn)方 式、第一放方面的第三種可能實(shí)現(xiàn)方式,在第一方面的第四種可能實(shí)現(xiàn)方式中,還包括:
[0020] 確定當(dāng)前遍歷的節(jié)點(diǎn)在所述待處理序列中的第一位置;
[0021] 在所述待處理序列中,且在所述第一位置之后,查找包含于工作集中的節(jié)點(diǎn);
[0022] 當(dāng)查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),確定所述工作集中的節(jié)點(diǎn)在所述待處理 序列中的位置為第二位置;
[0023] 當(dāng)未查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),從所述待處理序列中的第一個(gè)節(jié)點(diǎn)開 始向后查找。
[0024] 第二方面,提供了 一種并發(fā)分析的裝置,包括:
[0025] 獲取單元,用于由獲取PEG中節(jié)點(diǎn)組成的待處理序列,所述待處理序列為減少所 述節(jié)點(diǎn)重復(fù)次數(shù)的嚴(yán)格拓?fù)湫蛄校?br> [0026] 遍歷單元,用于根據(jù)預(yù)設(shè)規(guī)則對(duì)所述獲取單元獲取到的所述待處理序列中的節(jié)點(diǎn) 進(jìn)行遍歷,所述預(yù)設(shè)規(guī)則用于尋找待遍歷的節(jié)點(diǎn)。
[0027] 在第二方面的第一種可能實(shí)現(xiàn)方式中,所述獲取單元,包括:
[0028] 獲取子單元,用于獲取所述PEG的根節(jié)點(diǎn),并將所述根節(jié)點(diǎn)壓入預(yù)設(shè)棧中,所述預(yù) 設(shè)棧用于存儲(chǔ)所述PEG中的根節(jié)點(diǎn)和/或所述PEG中入度為0的節(jié)點(diǎn);獲取所述預(yù)設(shè)棧的 棧頂節(jié)點(diǎn),將所述棧頂節(jié)點(diǎn)加入所述待處理序列;獲取所述棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn);
[0029] 刪除子單元,用于所述PEG中刪除所述棧頂節(jié)點(diǎn)與所述獲取子單元獲取的所述后 繼節(jié)點(diǎn)組成的邊。
[0030] 結(jié)合第二方面的、第二方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第二種可能實(shí) 現(xiàn)方式中,
[0031] 所述獲取子單元,還用于當(dāng)確定所述棧頂節(jié)點(diǎn)為線程創(chuàng)建點(diǎn)時(shí),獲取所述棧頂節(jié) 點(diǎn)先創(chuàng)建的線程的首節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊,并將所述首節(jié)點(diǎn)壓入所述預(yù)設(shè)棧;當(dāng) 確定所述棧頂節(jié)點(diǎn)不是線程創(chuàng)建點(diǎn)時(shí),獲取所述棧頂節(jié)點(diǎn)的所有后繼節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn) 組成的邊,并將所述后繼節(jié)點(diǎn)中入度為〇的所述后繼節(jié)點(diǎn)壓入所述預(yù)設(shè)棧中;
[0032] 所述刪除子單元,還用于刪除所述棧頂節(jié)點(diǎn)先創(chuàng)建的線程的首節(jié)點(diǎn)與所述棧頂節(jié) 點(diǎn)組成的邊;刪除所述棧頂節(jié)點(diǎn)的所有后繼節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊。
[0033] 結(jié)合第二方面或第二方面的第一種可能實(shí)現(xiàn)方式或第二方面的第二種可能實(shí)現(xiàn) 方式中的任意一種實(shí)現(xiàn)方式,在第二方面的第三種可能實(shí)現(xiàn)方式中,還包括:
[0034] 設(shè)置單元,用于在所述獲取單元獲取所述待處理序列之前,為所述PEG中的線程 設(shè)置并行層次,所述并行層次表示所述PEG中線程之間的關(guān)系。
[0035] 結(jié)合第二方面的第一種可能實(shí)現(xiàn)方式、第二方面的第二種可能實(shí)現(xiàn)方式、第二方 面的第三種可能實(shí)現(xiàn)方式,在第二方面的第四種可能實(shí)現(xiàn)方式中,還包括J
[0036] 確定單元,用于確定所述遍歷單元當(dāng)前遍歷節(jié)點(diǎn)在所述獲取單元獲取的所述待處 理序列中的第一位置;
[0037] 查找單元,用于在所述確定單元確定的所述第一位置之后,查找包含于工作集中 的節(jié)點(diǎn);
[0038] 所述確定單元,還用于,在所述查找單元查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),確 定所述工作集中的節(jié)點(diǎn)在所述獲取單元獲取的所述待處理序列中的位置為第二位置;
[0039] 所述查找單元,還用于當(dāng)未查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),從所述獲取單 元獲取的所述待處理序列中的第一個(gè)節(jié)點(diǎn)開始向后查找。
[0040] 本發(fā)明實(shí)施例提供的并發(fā)分析裝的方法及裝置,通過(guò)設(shè)置并行層次,獲取PEG中 節(jié)點(diǎn)組成的待處理序列,并在該待處理序列中標(biāo)記當(dāng)前處理節(jié)點(diǎn)的位置,并在該位置之后 繼續(xù)尋找包含于工作集中的節(jié)點(diǎn),并將這一節(jié)點(diǎn)作為下一待處理節(jié)點(diǎn)。本發(fā)明實(shí)施例提供 的技術(shù)方案,解決了現(xiàn)有技術(shù)在并發(fā)分析過(guò)程中的分析效率低的問(wèn)題。

【專利附圖】

【附圖說(shuō)明】
[0041] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0042] 圖1為本發(fā)明一實(shí)施例提供的一種并發(fā)分析的方法流程;
[0043] 圖2為本發(fā)明另一實(shí)施例提供的一種并發(fā)分析的方法流程;
[0044] 圖3為本發(fā)明另一實(shí)施例提供的一種PEG示意圖;
[0045] 圖4為本發(fā)明另一實(shí)施例提供的一種并發(fā)分析裝置的組成示意圖;
[0046]圖5為本發(fā)明另一實(shí)施例提供的另一種并發(fā)分析裝置的組成示意圖;
[0047]圖6為本發(fā)明又一實(shí)施例提供的一種并發(fā)分析裝置的組成示意圖。

【具體實(shí)施方式】
[0048]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的頭施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0049]本發(fā)明一實(shí)施例提供了一種并發(fā)分析的方法,如圖1所示,該方法包括:
[0050] 101、獲取由PEG中的節(jié)點(diǎn)組成的待處理序列。
[0051] 其中,待處理序列為能夠減少節(jié)點(diǎn)重復(fù)次數(shù)的嚴(yán)格拓?fù)湫蛄校煞Q之為嚴(yán)格拓?fù)?序列。
[0052] 值得說(shuō)明的是,原有的并發(fā)分析方法,存在逆向傳播導(dǎo)致的冗余計(jì)算,從而造成并 發(fā)分析效率低的問(wèn)題。其中,將在采用迭代算法處理工作集中的節(jié)點(diǎn)時(shí),可能導(dǎo)致一個(gè)節(jié)點(diǎn) 的后繼節(jié)點(diǎn)在該節(jié)點(diǎn)之前被分析的情況,稱之為逆向傳播。那么在逆向傳播情況下,如果給 定節(jié)點(diǎn)的后繼節(jié)點(diǎn)在該節(jié)點(diǎn)之前被更新,就會(huì)導(dǎo)致這些后繼節(jié)點(diǎn)被多次重復(fù)處理,從而產(chǎn) 生大量冗余計(jì)算。
[0053]進(jìn)一步的,針對(duì)上述問(wèn)題,對(duì)PEG中的節(jié)點(diǎn)采用拓?fù)渑判虻姆椒?,但是依照傳統(tǒng)計(jì) 算拓?fù)湫虻乃惴ㄓ?jì)算得到的序列可能不是唯一的。造成這種情況的主要原因在于:在計(jì)算 拓?fù)湫蛄羞^(guò)程中,如果當(dāng)前由PEG轉(zhuǎn)換的有向圖中存在多個(gè)入度為〇的節(jié)點(diǎn),那么下一個(gè)待 選取的節(jié)點(diǎn)就是任意的。
[0054] 更進(jìn)一步的,在該嚴(yán)格拓?fù)湫蛄械墨@取過(guò)程中,優(yōu)先從上次獲取節(jié)點(diǎn)的后繼節(jié)點(diǎn) 中選取下一節(jié)點(diǎn),以保證最終獲得的序列中節(jié)點(diǎn)的連續(xù)性,此外,在該嚴(yán)格拓?fù)湫蛑幸氩?行層次來(lái)表示PEG中線程之間的關(guān)系,當(dāng)存在多個(gè)待選擇的后繼節(jié)點(diǎn)時(shí),優(yōu)先選取與前一 個(gè)節(jié)點(diǎn)具有同樣并行層次的節(jié)點(diǎn),其中并行層次的具體描述將在下述201中進(jìn)行詳細(xì)說(shuō) 明。
[0055] 值得說(shuō)明的是,如果和上一選取的節(jié)點(diǎn)具有同樣并行層次的節(jié)點(diǎn)存在多個(gè),那么 在這種情況下,可以任意選取節(jié)點(diǎn),因?yàn)樵谶@些節(jié)點(diǎn)具有同樣的可能并行集合,優(yōu)先計(jì)算哪 一個(gè)節(jié)點(diǎn)只會(huì)影響獲取節(jié)點(diǎn)計(jì)算結(jié)果的先后順序,并不會(huì)影響并發(fā)分析的效率和結(jié)果的正 確性。
[0056] 102、根據(jù)預(yù)設(shè)規(guī)則對(duì)待處理序列中的節(jié)點(diǎn)進(jìn)行遍歷。
[0057] 其中,該預(yù)設(shè)規(guī)則用于尋找待遍歷的節(jié)點(diǎn),即用于尋找當(dāng)前遍歷節(jié)點(diǎn)的下一個(gè)節(jié) 點(diǎn)。
[0058] 可選的,在上述獲取到的嚴(yán)格拓?fù)湫蛄兄性O(shè)置一個(gè)標(biāo)記,該標(biāo)記用于記錄迭代分 析過(guò)程中當(dāng)前處理節(jié)點(diǎn)在該整個(gè)嚴(yán)格拓?fù)湫蛑械奈恢茫蛇x的該當(dāng)前處理節(jié)點(diǎn)的在該待處 理序列中的位置可設(shè)為第一位置。
[0059] 具體的,在對(duì)待處理序列中的節(jié)點(diǎn)進(jìn)行遍歷時(shí),在選下一個(gè)待遍歷的節(jié)點(diǎn)時(shí),按照 預(yù)設(shè)規(guī)則即在該待處理序列的第一位置之后,開始查找包含于工作集中的節(jié)點(diǎn)。如果查找 到包含于工作集中的節(jié)點(diǎn)時(shí),將該節(jié)點(diǎn)作為下一次待遍歷的節(jié)點(diǎn);如果未能查找到包含于 工作集中的節(jié)點(diǎn)時(shí),才會(huì)從頭遍歷該待處理序列。
[0060] 值得說(shuō)明的是,按照上述預(yù)設(shè)規(guī)則對(duì)待處理序列進(jìn)行遍歷,而不是每次都從頭開 始遍歷該帶處理序列,則能夠進(jìn)一步的提高并發(fā)分析的效率。
[0061] 本發(fā)明實(shí)施例提供的一種并發(fā)分析的方法,通過(guò)設(shè)置并行層次,獲取PEG中節(jié)點(diǎn) 組成的待處理序列,并在該待處理序列中標(biāo)記當(dāng)前處理節(jié)點(diǎn)的位置,并在該位置之后繼續(xù) 尋找包含于工作集中的節(jié)點(diǎn),并將這一節(jié)點(diǎn)作為下一待處理節(jié)點(diǎn)。本發(fā)明實(shí)施例提供的技 術(shù)方案,解決了現(xiàn)有技術(shù)在并發(fā)分析過(guò)程中的分析效率低的問(wèn)題。
[0062] 本發(fā)明另一實(shí)施例提供了一種并發(fā)分析的方法,如圖2所示,該方法包括:
[0063] 201、為PEG中的線程設(shè)置并行層次。
[0064] 其中,并行層次表示PEG中線程之間的關(guān)系。一個(gè)PEG中包含一個(gè)或多個(gè)線程,在 線程中可以創(chuàng)建新的線程,每個(gè)線程都有一V起始節(jié)點(diǎn)和一個(gè)終止節(jié)占,這些節(jié)占即為PEG 中的節(jié)點(diǎn)。 ^ ^
[0065]優(yōu)選的,該并行層次可包括但不限定使用數(shù)字來(lái)區(qū)分不同的并行層次。具體的,為 PEG中的線程設(shè)置并行層次具體包括:獲取該pEG中的主線程,并設(shè)該主線程的并行層次為 〇丄對(duì)于該P(yáng)EG中的其余線程,如果線程丨創(chuàng)建了線程 2,則線程2的并行層次比線程1的并 行層次多1。例如,設(shè)并行層次通過(guò)PL來(lái)表示,且設(shè)tl、t2為PEG中的兩個(gè)線程,如果線程 t2被線程tl創(chuàng)建,則其并行層次關(guān)系為pL(t2) = PL(tl)+1 ;進(jìn)一步的,如果設(shè)該pEG中的 主線程的并行層次為0,即PL(主線程)=〇,結(jié)合上述描述,則存在: pEG中的任意一個(gè)線 程的并行層次的數(shù)值都大于或等于0。
[0066] 202、獲取PEG的根節(jié)點(diǎn),并將節(jié)點(diǎn)壓入預(yù)設(shè)棧。
[0067]其中,預(yù)設(shè)棧用于存儲(chǔ)PEG中的根節(jié)點(diǎn)和/或PEG中入度為〇的節(jié)點(diǎn)。
[0068] 2〇3、獲取預(yù)設(shè)棧的棧頂節(jié)點(diǎn),將該棧頂節(jié)點(diǎn)加入待處理序列。
[0069] 204、獲取棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn),并在PEG中刪除該棧頂節(jié)點(diǎn)與其后繼節(jié)點(diǎn)組成的 邊。
[0070]值得說(shuō)明的是,根據(jù)該棧頂節(jié)點(diǎn)是否為線程創(chuàng)建點(diǎn),獲取后繼節(jié)點(diǎn)包括以下兩種 情況:
[0071]第一種情況:當(dāng)確定該棧頂節(jié)點(diǎn)為線程創(chuàng)建點(diǎn)時(shí),獲取并刪除該棧頂節(jié)點(diǎn)先創(chuàng)建 的線程的首節(jié)點(diǎn)與該棧頂節(jié)點(diǎn)組成的邊,并將該首節(jié)點(diǎn)壓入預(yù)設(shè)棧。
[0072]第二種情況:當(dāng)確定該棧頂節(jié)點(diǎn)不是線程創(chuàng)建點(diǎn)時(shí),獲取并刪除該棧頂節(jié)點(diǎn)與其 所有后繼節(jié)點(diǎn)組成的邊,并將其后繼節(jié)點(diǎn)為0的節(jié)點(diǎn)壓入上述預(yù)設(shè)棧中。
[0073] 205、獲取待處理序列。
[0074]其中,該待處理序列為比現(xiàn)有的拓?fù)渑判蚋軠p少節(jié)點(diǎn)的重復(fù)次數(shù),稱為嚴(yán)格拓 撲序列。
[0075]值得說(shuō)明的是,上述201至204重復(fù)執(zhí)行,直到上述預(yù)設(shè)棧為空為止,此時(shí)獲取到 的最終的待處理序列。
[0076] 206、根據(jù)預(yù)設(shè)規(guī)則對(duì)上述的待處理序列進(jìn)行遍歷。
[0077] 其中,預(yù)設(shè)規(guī)則與上述102中的描述相同,在此不再重復(fù)說(shuō)明。
[0078] 進(jìn)一步的,首先,確定當(dāng)前遍歷的節(jié)點(diǎn)在該待處理序列中的第一位置;
[0079] 其次,在待處理序列中的第一位置之后,查找包含于工作集中的節(jié)點(diǎn);
[0080] 更進(jìn)一步的,當(dāng)查找到包含于工作集中的節(jié)點(diǎn)時(shí),確定該節(jié)點(diǎn)在待處理序列中的 位置為第二位置;當(dāng)未查找到包含于工作集中的節(jié)點(diǎn)時(shí),從該待處理序列的第一個(gè)節(jié)點(diǎn)開 始向后查找。
[0081] 值得說(shuō)明的是,在獲取到上述的待處理序列并通過(guò)預(yù)設(shè)規(guī)則遍歷該待處理序列, 在并發(fā)分析過(guò)程中,能夠通過(guò)減少遍歷的次數(shù),從而使得并發(fā)分析的效率顯著提高。
[0082] 例如,在PEG圖中包含兩個(gè)線程11和t2,其中線程11在節(jié)點(diǎn)n2中創(chuàng)建了線程t2, 兩個(gè)線程的控制流圖之間通過(guò)線程創(chuàng)建邊相連,且在該圖中*為通配符,每個(gè)節(jié)是一個(gè)三 元組〈object, name, caller〉分別表示當(dāng)前節(jié)點(diǎn)所表示的操作的執(zhí)行對(duì)象,所執(zhí)行的方法 以及當(dāng)前節(jié)點(diǎn)所屬的線程。具體的:(*,begin, *):表示任意線程的起始節(jié)點(diǎn),其中*表示 操作執(zhí)行對(duì)象和所屬線程可以是任意的;(t,start,*):表示一個(gè)創(chuàng)建了線程t的節(jié)點(diǎn)。通 配符*表示該節(jié)點(diǎn)可以在任何其他線程中,例如,(*,begin,t2)表示線程t2的起始節(jié)點(diǎn); (t,join,*):表示一個(gè)終止了線程t的節(jié)點(diǎn)。通配符*的含義同上在(t,start,*)中的含 義;可選的,0,end,t2)也可以表示線程t2的終止節(jié)點(diǎn)。如圖3所示,結(jié)合上述描述,在該 PEG中,節(jié)點(diǎn)nl為線程tl的起始節(jié)點(diǎn),表示為(8, begin,tl) ;tl在節(jié)點(diǎn)n2中創(chuàng)建了線程 t2,表示為(t2,start,tl);在節(jié)點(diǎn)n3,線程tl中的對(duì)象objl執(zhí)行方法fl,表不為(objl, fl,tl);在節(jié)點(diǎn)n4,線程tl中的對(duì)象obj2執(zhí)行方法fl,表示為(〇bj2,fl,tl);節(jié)點(diǎn)n5為, 在線程tl中終止線程t2的節(jié)點(diǎn);表示為(t2, jion,tl);在節(jié)點(diǎn)n6,線程tl中的對(duì)象〇bj2 執(zhí)行方法f2,表示為(obj2, f2, tl);節(jié)點(diǎn)n7為線程tl的終止節(jié)點(diǎn),表示為(*,end,tl); 節(jié)點(diǎn)n8為線程t2的起始節(jié)點(diǎn),表示為(*,begin,t2);在節(jié)點(diǎn)n9,線程t2中的對(duì)象〇bj3 執(zhí)行方法fl,表示為(〇bj3, fl, t2);節(jié)點(diǎn)nlO為線程t2的終止節(jié)點(diǎn),表示為(*,end, t2)。 并且,在該P(yáng)EG中,節(jié)點(diǎn)線程tl中的包含的節(jié)點(diǎn)nl至n7和線程t2中包含的節(jié)點(diǎn)n8至nlO 通過(guò)通信邊相連,線程tl與線程t2之間通過(guò)線程創(chuàng)建邊相連,可選的通信邊通過(guò)有向線段 表不。
[0083] 進(jìn)一步的,結(jié)合上述圖3中示意的PEG,按照現(xiàn)有的算法通過(guò)先入先出FIFO的節(jié)點(diǎn) 存取方式,獲取到的待處理序列為 n2、n3、n6、n4、n7、n6、n5、n3、n8、n7、n6、n4、n3、n8、n7、 n5、n4、n8、n5,如下表1所示:
[0084] 表1PEG節(jié)點(diǎn)處理序列
[0085]

【權(quán)利要求】
1. 一種并發(fā)分析的方法,其特征在于,包括: 獲取由并發(fā)執(zhí)行圖PEG中的節(jié)點(diǎn)組成的待處理序列,所述待處理序列為減少所述節(jié)點(diǎn) 重復(fù)次數(shù)的嚴(yán)格拓?fù)湫蛄校? 根據(jù)預(yù)設(shè)規(guī)則對(duì)所述待處理序列中的節(jié)點(diǎn)進(jìn)行遍歷,所述預(yù)設(shè)規(guī)則用于尋找待遍歷的 節(jié)點(diǎn)。
2. 根據(jù)權(quán)利要求1所述的并發(fā)分析的方法,其特征在于,所述獲取待處理序列包括: 獲取所述PEG的根節(jié)點(diǎn),并將所述根節(jié)點(diǎn)壓入預(yù)設(shè)棧中,所述預(yù)設(shè)棧用于存儲(chǔ)所述PEG 中的根節(jié)點(diǎn)和/或所述PEG中入度為0的節(jié)點(diǎn); 獲取所述預(yù)設(shè)棧的棧頂節(jié)點(diǎn),將所述棧頂節(jié)點(diǎn)加入所述待處理序列; 獲取所述棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn),并在所述PEG中刪除所述棧頂節(jié)點(diǎn)與所述后繼節(jié)點(diǎn)組 成的邊。
3. 根據(jù)權(quán)利要求2所述的并發(fā)分析的方法,其特征在于,所述獲取所述棧頂節(jié)點(diǎn)的后 繼節(jié)點(diǎn),具體包括: 當(dāng)確定所述棧頂節(jié)點(diǎn)為線程創(chuàng)建點(diǎn)時(shí),獲取并刪除所述棧頂節(jié)點(diǎn)先創(chuàng)建的線程的首節(jié) 點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊,并將所述首節(jié)點(diǎn)壓入所述預(yù)設(shè)棧; 當(dāng)確定所述棧頂節(jié)點(diǎn)不是線程創(chuàng)建點(diǎn)時(shí),獲取并刪除所述棧頂節(jié)點(diǎn)的所有后繼節(jié)點(diǎn) 與所述棧頂節(jié)點(diǎn)組成的邊,并將所述后繼節(jié)點(diǎn)中入度為〇的所述后繼節(jié)點(diǎn)壓入所述預(yù)設(shè)棧 中。
4. 根據(jù)所述權(quán)利要求1至3任意一項(xiàng)所述的并發(fā)分析的方法,其特征在于,所述方法還 包括: 為所述PEG中的線程設(shè)置并行層次,所述并行層次表示所述PEG中線程之間的關(guān)系。
5. 根據(jù)權(quán)利要求4所述的并發(fā)分析的方法,其特征在于,所述方法還包括: 確定當(dāng)前遍歷的節(jié)點(diǎn)在所述待處理序列中的第一位置; 在所述待處理序列中,且在所述第一位置之后,查找包含于工作集中的節(jié)點(diǎn); 當(dāng)查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),確定所述工作集中的節(jié)點(diǎn)在所述待處理序列 中的位置為第二位置; 當(dāng)未查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),從所述待處理序列中的第一個(gè)節(jié)點(diǎn)開始向 后查找。
6. -種并發(fā)分析的裝置,其特征在于,包括: 獲取單元,用于由獲取PEG中節(jié)點(diǎn)組成的待處理序列,所述待處理序列為減少所述節(jié) 點(diǎn)重復(fù)次數(shù)的嚴(yán)格拓?fù)湫蛄校? 遍歷單元,用于根據(jù)預(yù)設(shè)規(guī)則對(duì)所述獲取單元獲取到的所述待處理序列中的節(jié)點(diǎn)進(jìn)行 遍歷,所述預(yù)設(shè)規(guī)則用于尋找待遍歷的節(jié)點(diǎn)。
7. 根據(jù)權(quán)利要求6所述的并發(fā)分析的裝置,其特征在于,所述獲取單元,包括: 獲取子單元,用于獲取所述PEG的根節(jié)點(diǎn),并將所述根節(jié)點(diǎn)壓入預(yù)設(shè)棧中,所述預(yù)設(shè)棧 用于存儲(chǔ)所述PEG中的根節(jié)點(diǎn)和/或所述PEG中入度為0的節(jié)點(diǎn);獲取所述預(yù)設(shè)棧的棧頂 節(jié)點(diǎn),將所述棧頂節(jié)點(diǎn)加入所述待處理序列;獲取所述棧頂節(jié)點(diǎn)的后繼節(jié)點(diǎn); 刪除子單元,用于所述PEG中刪除所述棧頂節(jié)點(diǎn)與所述獲取子單元獲取的所述后繼節(jié) 點(diǎn)組成的邊。
8. 根據(jù)權(quán)利要求7所述的并發(fā)分析的裝置,其特征在于, 所述獲取子單元,還用于當(dāng)確定所述棧頂節(jié)點(diǎn)為線程創(chuàng)建點(diǎn)時(shí),獲取所述棧頂節(jié)點(diǎn)先 創(chuàng)建的線程的首節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊,并將所述首節(jié)點(diǎn)壓入所述預(yù)設(shè)棧;當(dāng)確定 所述棧頂節(jié)點(diǎn)不是線程創(chuàng)建點(diǎn)時(shí),獲取所述棧頂節(jié)點(diǎn)的所有后繼節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成 的邊,并將所述后繼節(jié)點(diǎn)中入度為0的所述后繼節(jié)點(diǎn)壓入所述預(yù)設(shè)棧中; 所述刪除子單元,還用于刪除所述棧頂節(jié)點(diǎn)先創(chuàng)建的線程的首節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組 成的邊;刪除所述棧頂節(jié)點(diǎn)的所有后繼節(jié)點(diǎn)與所述棧頂節(jié)點(diǎn)組成的邊。
9. 根據(jù)權(quán)利要求6至8任意一項(xiàng)所述的并發(fā)分析的裝置,其特征在于,所述裝置還包 括: 設(shè)置單元,用于在所述獲取單元獲取所述待處理序列之前,為所述PEG中的線程設(shè)置 并行層次,所述并行層次表示所述PEG中線程之間的關(guān)系。
10. 根據(jù)權(quán)利要求9所述的并發(fā)分析的裝置,其特征在于,所述裝置還包括: 確定單元,用于確定所述遍歷單元當(dāng)前遍歷節(jié)點(diǎn)在所述獲取單元獲取的所述待處理序 列中的第一位置; 查找單元,用于在所述確定單元確定的所述第一位置之后,查找包含于工作集中的節(jié) 占. 所述確定單元,還用于,在所述查找單元查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),確定所 述工作集中的節(jié)點(diǎn)在所述獲取單元獲取的所述待處理序列中的位置為第二位置; 所述查找單元,還用于當(dāng)未查找到包含于所述工作集中的節(jié)點(diǎn)時(shí),從所述獲取單元獲 取的所述待處理序列中的第一個(gè)節(jié)點(diǎn)開始向后查找。
【文檔編號(hào)】G06F9/44GK104252346SQ201310262639
【公開日】2014年12月31日 申請(qǐng)日期:2013年6月27日 優(yōu)先權(quán)日:2013年6月27日
【發(fā)明者】陳聰明, 霍瑋, 李豐, 馮曉兵 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1