999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于類的Java多線程程序數(shù)據(jù)競爭靜態(tài)檢測算法*

2014-09-14 01:24:37宋東海賁可榮張志祥
關(guān)鍵詞:程序分析檢測

宋東海,賁可榮,張志祥

(海軍工程大學(xué)計(jì)算機(jī)工程系,湖北 武漢 430033)

一種基于類的Java多線程程序數(shù)據(jù)競爭靜態(tài)檢測算法*

宋東海,賁可榮,張志祥

(海軍工程大學(xué)計(jì)算機(jī)工程系,湖北 武漢 430033)

多線程并發(fā)程序的廣泛使用引發(fā)了更多的數(shù)據(jù)競爭問題,競爭檢測對于提高軟件質(zhì)量具有重要意義。將競爭靜態(tài)檢測和靜態(tài)切片分析結(jié)合起來,提出了一種基于類的Java數(shù)據(jù)競爭靜態(tài)檢測算法,該算法利用函數(shù)調(diào)用層次獲得函數(shù)調(diào)用鏈,對類域進(jìn)行分析,找出可能數(shù)據(jù)競爭,通過靜態(tài)切片縮小程序分析范圍,并結(jié)合數(shù)據(jù)競爭的必要條件,去掉不可能數(shù)據(jù)競爭。實(shí)例表明,該算法可用于指導(dǎo)修復(fù)程序中的競爭缺陷。

多線程程序;數(shù)據(jù)競爭;程序切片;靜態(tài)分析;競爭檢測

1 引言

隨著多核技術(shù)的出現(xiàn)和GUI程序的廣泛應(yīng)用,為有效利用計(jì)算資源,提高系統(tǒng)效率,而采用并發(fā)程序設(shè)計(jì)。雖然Java編程語言為編寫多線程程序提供強(qiáng)大的語言支持,但是編寫正確高效的多線程并發(fā)程序仍然比較困難。在多線程程序中,當(dāng)兩個線程在無時序約束的情況下訪問同一個內(nèi)存位置并且至少有一個是寫訪問時,就會導(dǎo)致數(shù)據(jù)競爭[1]。粗粒度的保守機(jī)制可以避免數(shù)據(jù)競爭,但與此同時可能會導(dǎo)致死鎖,并發(fā)多線程編程導(dǎo)致許多

特定的優(yōu)化和檢錯問題。高效、精確的競爭檢測對于提高軟件可靠性、增強(qiáng)系統(tǒng)穩(wěn)定性具有重要意義。

2 Java數(shù)據(jù)競爭檢測

2.1 競爭檢測技術(shù)研究現(xiàn)狀

按照競爭檢測的依據(jù),數(shù)據(jù)競爭可分為基于發(fā)生序(Happen-Before Order)[2,3]、鎖集 (Lock-Set)[4,5]以及其混合方法[6,7]。按照競爭檢測的時機(jī),數(shù)據(jù)競爭檢測可分為競爭動態(tài)檢測[2,3]和競爭靜態(tài)檢測[7,8]。競爭動態(tài)檢測采用插樁技術(shù)能獲得變量和別名的準(zhǔn)確信息,準(zhǔn)確捕獲共享內(nèi)存訪問的發(fā)生序和鎖集信息,幾乎不產(chǎn)生誤報(bào)(False-Positive),但依賴于程序輸入,只分析與程序執(zhí)行路徑有關(guān)的代碼,會漏報(bào)(False-Negative)一些真正的數(shù)據(jù)競爭并且開銷很大[3]。競爭靜態(tài)檢測是程序編譯時或者編譯后對源程序或者目標(biāo)代碼進(jìn)行檢測,需要分析整個程序,不像動態(tài)競爭檢測,無需插樁,不需占用程序的運(yùn)行時間,不受程序規(guī)模限制。但是,因靜態(tài)分析的不可判定性[9],對于任何一個有一定規(guī)模的軟件,希望獲得關(guān)于它的完備描述通常是不現(xiàn)實(shí)的[10],往往采用不完備的近似算法,靜態(tài)分析的結(jié)果比較保守。

精確的數(shù)據(jù)競爭檢測是一個NP-hard[11]問題,由于并發(fā)程序中線程調(diào)度的不確定性,數(shù)據(jù)競爭的出現(xiàn)是隨機(jī)的,數(shù)據(jù)競爭很難被發(fā)現(xiàn)和重現(xiàn),并且數(shù)據(jù)競爭不像死鎖,不會導(dǎo)致程序的突然失效,無法繼續(xù)運(yùn)行,大量的誤報(bào)會使得使用者對靜態(tài)分析工具失去信心和耐心。含有數(shù)據(jù)競爭錯誤的程序調(diào)試是非常困難的,為了提高分析精度,減少誤報(bào),便于調(diào)試程序,有必要提高數(shù)據(jù)競爭靜態(tài)檢測的精度。

2.2 Java內(nèi)存模型

內(nèi)存模型描述的是程序中變量(實(shí)例域、靜態(tài)域、數(shù)組元素等)之間的關(guān)系,以及在實(shí)際計(jì)算機(jī)系統(tǒng)中將變量存儲到內(nèi)存和從內(nèi)存取出變量的底層細(xì)節(jié)。

JMM(Java Memory Model)是JVM(Java Virtual Machine)的內(nèi)存模型,規(guī)范了線程之間通過內(nèi)存的交互原則。JMM定義了一個統(tǒng)一的內(nèi)存管理模型,屏蔽了底層平臺內(nèi)存管理細(xì)節(jié),具體由各個虛擬機(jī)來實(shí)現(xiàn)對內(nèi)存的動態(tài)管理,包括對內(nèi)存的分配以及回收。JMM將線程能訪問的內(nèi)存分為主內(nèi)存(Main Memory)與工作內(nèi)存(Working Memory)。Java中所有類實(shí)例域、靜態(tài)域、數(shù)組都儲存在主內(nèi)存中,對于所有線程都是共享的。每個線程都有自己的工作內(nèi)存,工作內(nèi)存中保存的是主內(nèi)存中某些變量的拷貝和臨時變量,線程內(nèi)對所有變量的操作都是在工作內(nèi)存中進(jìn)行,線程之間無法相互直接訪問,變量傳遞均需要通過主內(nèi)存完成,數(shù)據(jù)競爭只可能出現(xiàn)在主內(nèi)存變量上。

2.3 Java語言數(shù)據(jù)競爭靜態(tài)檢測

Java程序競爭靜態(tài)檢測主要有流非敏感的基于類型約束的系統(tǒng)。流敏感的基于鎖集合算法的靜態(tài)檢測和路徑敏感的模型檢測器。Choi等人[12]將競爭檢測分成一系列分析階段,包括逃逸分析階段、別名分析階段和競爭檢測階段。在此基礎(chǔ)上斯坦福Naik等人[8]提出了一種K-對象敏感、上下文敏感Java程序競爭靜態(tài)檢測算法,算法分為五個階段:(1)可達(dá)競爭對檢測(originalRaces);(2)別名競爭對檢測(aliasingRaces);(3)逃逸競爭對檢測(escapingRaces);(4)并發(fā)競爭對檢測(parallelRaces);(5)未加鎖競爭對檢測(unlockedRaces)。該算法隨著各階段的進(jìn)行,逐漸縮小檢測范圍,采用了自適應(yīng)K-對象敏感(K-Object-Sensitive)的上下文信息,提高了靜態(tài)分析的精度。張昱等人[7]基于即時編譯器JIT(Just-In Time)采用增量式競爭檢測技術(shù),提高了競爭檢測的精度。

2.4 并發(fā)程序靜態(tài)切片

Weiser認(rèn)為一個切片與人們在調(diào)試一個程序時所做的智力抽象相對應(yīng)。他定義的程序P的切片S是一個可執(zhí)行的程序,對某個興趣點(diǎn)s處的變量v而言(〈s,v〉稱為切片準(zhǔn)則),S由程序P中可能影響s處變量v的值的所有語句構(gòu)成。這個可執(zhí)行部分相對于程序P在功能上是等效的。

程序切片作為一種對程序結(jié)構(gòu)進(jìn)行分析的技術(shù),可以用在程序信息分析方面,從而增強(qiáng)對程序的理解、調(diào)試、測試和確認(rèn)。1993年,Cheng J[13]最早考慮了并發(fā)程序的靜態(tài)切片,并提出了一種基于程序依賴網(wǎng)PDN(Process Dependence Net)的并發(fā)程序切片方法。1998年,Krinke J[14]針對多線程程序提出了一種新的靜態(tài)切片算法,引入了線程控制流圖、線程程序依賴圖,同時提出了線程證據(jù)的概念,用來描述多線程程序的執(zhí)行路徑。對程序的分析主要考慮程序數(shù)據(jù)依賴和控制依賴關(guān)系。Ranganath[1]于2003年又提出了并發(fā)程序干擾依賴(Interference Dependence)和現(xiàn)成依賴(Ready Dependence)的概念。2007年,戚曉芳[15]提出了線程交互可達(dá)圖,構(gòu)建了以程序狀態(tài)和語句二元組為節(jié)點(diǎn)的并發(fā)程序依賴圖。隨著Java等語言并發(fā)程序的應(yīng)用越來越多,多線程程序的分析、調(diào)試、測試比傳統(tǒng)單線程程序更復(fù)雜。并發(fā)程序切片工具可以使并發(fā)程序的理解和維護(hù)等工作更容易完成。

3 基于類的Java競爭靜態(tài)檢測算法(CBDCD)描述

雖然競爭靜態(tài)檢測是一種有效的數(shù)據(jù)競爭檢測方法,但是它受到線程交互、動態(tài)數(shù)據(jù)分配、別名信息、流信息、路徑信息、數(shù)組元素的影響,很難有精確的實(shí)現(xiàn)。為了提高競爭檢測的有效性且方便程序理解,需要對競爭靜態(tài)檢測的結(jié)果進(jìn)行確認(rèn),但對數(shù)據(jù)競爭結(jié)果進(jìn)行確認(rèn)費(fèi)時又費(fèi)力。

本文將競爭靜態(tài)檢測技術(shù)和靜態(tài)程序切片技術(shù)結(jié)合起來,提出了一種基于類的Java數(shù)據(jù)競爭靜態(tài)檢測算法。該算法首先以函數(shù)調(diào)用鏈為上下文信息對類域進(jìn)行分析,找出可能數(shù)據(jù)競爭;然后通過對調(diào)用鏈靜態(tài)切片分析,并結(jié)合數(shù)據(jù)競爭的必要條件,去掉不可能數(shù)據(jù)競爭。

3.1 數(shù)據(jù)競爭必要條件

用五元組(t,p,v,e,ls)表示線程t在程序點(diǎn)p對變量v進(jìn)行訪問e(e為讀r或?qū)憌),ls表示在程序點(diǎn)p變量v訪問時擁有的鎖集,如果線程t在程序點(diǎn)p對變量v進(jìn)行訪問e時,v沒有被鎖保護(hù),則ls為?。數(shù)據(jù)對(t1,p1,v1,e1,ls1),(t2,p2,v2,e2,ls2)為數(shù)據(jù)競爭的必要條件:

(1)t1≠t2;

(2)alias(v1,v2)=true;

(3)程序點(diǎn)p1、p2處對變量v1、v2的訪問不具有發(fā)生序;

(4)e1、e2至少一個為寫操作;

(5)?l1∈ls1,?l2∈ls2,alias(l1,l2)=false(v1、v2在程序點(diǎn)p不被同一別名鎖保護(hù))。

3.2 競爭檢測算法描述

記一個類的域集合為F(包含實(shí)例域和靜態(tài)域),函數(shù)集合為M,線程為T,域操作為E(E={r,w}),函數(shù)調(diào)用鏈為L(L為m1-m2-m3-…-mn-1-mn,表示函數(shù)mn調(diào)用mn-1,…,m3調(diào)用m2,m2調(diào)用m1)。則函數(shù)m中對域f操作為f-e-m∈F×E×M,線程t中調(diào)用函數(shù)m記為m-l-t∈M×L×T,則f-e-m-l-t∈F×E×M×L×T表示線程t內(nèi)以l為調(diào)用鏈對方法m內(nèi)f進(jìn)行e操作,用OP表示這些操作的集合。

問題:求類C上的數(shù)據(jù)競爭集R={〈f-e1-m1-l1-t1,f-e2-m2-l2-t2〉|f-e-m-l-t∈F×E×M×L×T}。

算法步驟:

輸入:源程序P;

輸出:類C上的數(shù)據(jù)競爭集R。

步驟1初始化R=?,從源程序P中提取類C的F、M、F-E-M、M-L-T,計(jì)算OP={f-e-m-l-t|f-e-m-l-t∈F×E×M×L×T},執(zhí)行步驟2。

步驟2如果F為空,則轉(zhuǎn)步驟10;否則轉(zhuǎn)步驟3。

步驟3從F中取出一個元素f(F=F-{f}),計(jì)算f上的可能數(shù)據(jù)競爭集R0=①∪②,其中①為{〈f-r-mi1-lp1-tj1,f-w-mi2-lp2-tj2〉|f-e-m-l-t∈OP},②是{〈f-w-mi1-lp1-tj1,f-w-mi2-lp2-tj2〉|f-e-m-l-t∈OP},執(zhí)行步驟4。

步驟4從R0中取出一個元素r(R0=R0-{r}),對r中f-e-m-l-t按切片準(zhǔn)則〈p,f〉(p表示f-e-m-l-t程序點(diǎn),即線程t內(nèi)以l為調(diào)用鏈對方法m內(nèi)f進(jìn)行e操作的程序點(diǎn),下同)向后靜態(tài)切片,獲得切片s1、s2,執(zhí)行步驟5。

步驟5對s1、s2進(jìn)行分析,判斷f-r/w-mi1-lp1-tj1,f-w-mi2-lp2-tj2是否具有發(fā)生序,如果是,則轉(zhuǎn)步驟9;否則轉(zhuǎn)步驟6。

步驟6對s1、s2進(jìn)行分析,判斷s1.f、s2.f在程序點(diǎn)p是否指向同一內(nèi)存塊,如果是,則轉(zhuǎn)步驟7;否則轉(zhuǎn)步驟9。

步驟7對s1、s2進(jìn)行分析,判斷s1.f、s2.f在程序點(diǎn)p是否被別名鎖保護(hù),如果是,則轉(zhuǎn)步驟9;否則轉(zhuǎn)步驟8。

步驟8此競爭為數(shù)據(jù)競爭,R=R+{r}。判斷R0是否為空,如為空則轉(zhuǎn)步驟2;否則轉(zhuǎn)步驟4。

步驟9此競爭為不可能數(shù)據(jù)競爭。判斷R0是否為空,如為空則轉(zhuǎn)步驟2;否則轉(zhuǎn)步驟4。

步驟10輸出類C上的數(shù)據(jù)競爭R,結(jié)束。

通過步驟3可以得到可能讀-寫、寫-寫數(shù)據(jù)競爭。通過步驟5判斷是否具有發(fā)生序關(guān)系,去掉不可能數(shù)據(jù)競爭。通過步驟6變量別名分析,判斷是否對同一內(nèi)存塊訪問,去掉不可能數(shù)據(jù)競爭。通過步驟7鎖變量別名分析,判斷是否被同一別名鎖保護(hù),去掉不可能數(shù)據(jù)競爭。通過遍歷類中的每個域可以獲得類存在哪些競爭,對程序中的每個類執(zhí)行一次算法,就會獲得整個程序的數(shù)據(jù)競爭。

算法以類為基礎(chǔ)對程序進(jìn)行數(shù)據(jù)競爭檢測,可以讓我們更關(guān)注程序中經(jīng)常使用的類,并且對f-r-e-l-t進(jìn)行切片分析,縮小了程序分析的范圍,易于理解競爭出現(xiàn)的原因,便于指導(dǎo)修復(fù)程序中的競爭缺陷。

3.3 發(fā)生序判斷

問題:判斷f-e1-mi1-lp1-tj1,f-e2-mi2-lp2-tj2是否具有發(fā)生序。

算法步驟:

輸入:源程序P,f-e1-mi1-lp1-tj1,f-e2-mi2-lp2-tj2。

輸出:如果具有發(fā)生序,則輸出是;否則輸出否。

步驟1對f-e1-mi1-lp1-tj1,f-e2-mi2-lp2-tj2按切片準(zhǔn)則〈p,f〉向后靜態(tài)切片,獲得切片s1、s2。

步驟2對s1進(jìn)行分析,判斷程序點(diǎn)p2是否在程序點(diǎn)p1的切片s1上,如果是,則執(zhí)行步驟4;否則執(zhí)行步驟3。

步驟3對s2進(jìn)行分析,判斷程序點(diǎn)p1是否在程序點(diǎn)p2的切片s2上,如果是,則執(zhí)行步驟6;否則執(zhí)行步驟5。

步驟4對s2進(jìn)行分析,判斷程序點(diǎn)p1是否在程序點(diǎn)p2的切片s2上,如果是,則執(zhí)行步驟5;否則執(zhí)行步驟6。

步驟5沒有發(fā)生序,輸出否,退出。

步驟6具有發(fā)生序,輸出是,退出。

Figure 1 Dependence graph of program EX1圖1 程序EX1的依賴圖

4 算法實(shí)例分析

以文獻(xiàn)[8]第13頁程序EX1進(jìn)行實(shí)例分析,通過對實(shí)例程序進(jìn)行切片分析,可以獲得程序的依賴圖(包含數(shù)據(jù)依賴、控制依賴、調(diào)用依賴),如圖1所示。我們對類A進(jìn)行分析,首先獲得F={f4},M={A.init,A.set,A.get}(其中init為類的構(gòu)造函數(shù)),F(xiàn)-E-M={f4-r-A.get,f4-w-A.init,f4-w-A.get},M-L-T={A.get-B.get-T.main,A.get-B.get-T.run,A.set-B.set-T.main,A.init-B.init-T.main,A.set-B.set-T.run},為了方便后面闡述,F(xiàn)-E-M-L-T記為:

①f4-r-A.get-B.get-T.main;②f4-r-A.get-B.get-T.run;③f4-w-A.set-B.set-T.main;④f4-w-A.init-B.init-T.main;⑤f4-w-A.set-B.set-T.run(其中⑤屬于多個線程)

對f4訪問的可能數(shù)據(jù)競爭有:{〈①,⑤〉,〈②,③〉,〈②,④〉,〈②,⑤〉,〈③,⑤〉,〈④,⑤〉,〈⑤,⑤〉}。

如圖1所示,對于可能競爭〈①,⑤〉,通過對調(diào)用鏈①、⑤切片分析,調(diào)用鏈①、⑤分別對v1.v8.f4 (即同一內(nèi)存快)進(jìn)行讀寫,并且他們沒有被鎖保護(hù),會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈②,③〉,通過對調(diào)用鏈②、③切片分析,v2、v7屬于別名,并且被別名鎖(v2,v7)保護(hù),則不會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈②,④〉,通過對調(diào)用鏈②、④切片分析,調(diào)用鏈②先于④執(zhí)行,他們不會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈②,⑤〉,通過對調(diào)用鏈②、⑤切片分析,調(diào)用鏈②、⑤分別對v1.v8.f4、v2.v8.f4進(jìn)行讀寫,但是v1、v2屬于不同對象,則不會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈③,⑤〉,通過對調(diào)用鏈③、⑤切片分析,調(diào)用鏈③、⑤分別對v1.v8.f4、v2.v8.f4進(jìn)行讀寫,但是v1、v2屬于不同對象,則不會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈④,⑤〉,通過對調(diào)用鏈④、⑤切片分析,調(diào)用鏈④先于調(diào)用鏈⑤執(zhí)行,則不會產(chǎn)生數(shù)據(jù)競爭。對于可能競爭〈⑤,⑤〉,調(diào)用鏈⑤、⑤分別對v1.v8.f4 (即同一內(nèi)存快)進(jìn)行讀寫,并且他們沒有被鎖保護(hù),會產(chǎn)生數(shù)據(jù)競爭。

通過上述分析知道類A的域f4會產(chǎn)生兩個數(shù)據(jù)競爭R={〈①,⑤〉,〈⑤,⑤〉}。同理,可以對類B、T進(jìn)行分析,可以獲得整個程序的數(shù)據(jù)競爭。通過對每個類進(jìn)行分析,我們發(fā)現(xiàn)類之間的數(shù)據(jù)競爭是有關(guān)聯(lián)的,類B上的數(shù)據(jù)競爭實(shí)際上是由于對類B的A類型實(shí)例域f3的訪問導(dǎo)致的。可以通過對類A的訪問進(jìn)行保護(hù),消除類A、類B上的數(shù)據(jù)競爭。同樣可以消除類T的數(shù)據(jù)競爭。

5 結(jié)束語

數(shù)據(jù)競爭不會導(dǎo)致程序突然失效,因此未受到開發(fā)人員的重視。雖然現(xiàn)在的數(shù)據(jù)競爭檢測主要是以動態(tài)競爭檢測為主,但由于靜態(tài)競爭檢測不需要對運(yùn)行程序進(jìn)行插樁,不會影響系統(tǒng)運(yùn)行,隨著靜態(tài)競爭檢測技術(shù)分析結(jié)果精度的不斷提高,靜態(tài)競爭檢測越來越受到重視。本文通過引入切片技術(shù),提出了一種基于類的Java數(shù)據(jù)競爭靜態(tài)檢測算法。通過實(shí)例分析,發(fā)現(xiàn)類之間的數(shù)據(jù)競爭是有關(guān)聯(lián)的,對一個類進(jìn)行修改,不僅可以消除這個類上的數(shù)據(jù)競爭,還能消除與之有關(guān)聯(lián)的類上的部分?jǐn)?shù)據(jù)競爭。實(shí)例表明,該算法是可行的,并且對于修復(fù)程序中的競爭缺陷具有指導(dǎo)意義。

[1]RanganathVP,HatcliffJ.SlicingconcurrentJavaprogramsusingIndusandKaveri[J].InternationalJournalonSoftwareToolsforTechnologyTransfer,2007, 9(5-6):489-504.

[2]AdveSV,HillMD,MillerBP,etal.Detectingdataracesonweakmemorysystems[C]∥Procofthe18thAnnualInternationalSymposiumonComputerArchitecture,1991:234-243.

[3]ChristiaensM,BrosschereK.TRaDe:Atopologicalapproachtoon-the-flyracedetectioninJavaprograms[C]∥Procofthe1stJavaVirtualMachineResearchandTechnologySymposium, 2001:105-116.

[4]AgarwalR,SasturkarA,WangL,etal.Optimizedrun-timeracedetectionandatomicitycheckingusingpartialdiscoveredtypes[C]∥Procofthe20thIEEE/ACMInternationalConferenceonAutomatedSoftwareEngineering, 2005:233-242.

[5]ChengG,FengM,LeisersonC,etal.DetectingdataracesinCilkprogramsthatuselocks[C]∥Procofthe10thAnnualACMSymposiumonParallelAlgorithmsandArchitectures,1998:298-309.

[6]YuY,RodehefferT,ChenW.RaceTrack:Efficientdetectionofdataraceconditionsviaadaptivetracking[C]∥Procofthe20thACMSymposiumonOperatingSystemsPrinciples,2005:221-234.

[7]ZhangYu,HaoYun-yun.Incrementaldetectionofdataraceforjavaprograms[J].JournaLofXi’anJiaotongUniversity,2009,43(8):22-27.(inChinese)

[8]NaikM.EffectivestaticracedetectionforJava[D].Stanford,CA:StanfordUniversity,2008.

[9]LandiW.Undecidabilityofstaticanalysis[J].ACMLettersonProgrammingLanguagesandSystems,1992,1(4):323-337.

[10] Mei Hong,Wang Qian-xiang, Zhang Lu, et al. Software analysis:A road map[J].Chinese Journal of Computers, 2009,32(9):1697-1710.(in Chinese)

[11] Netzer R H B, Miller B P. What are race conditions? some issues and formalizations [J].ACM Letters on Programming Languages and Systems, 1992,1(1):74-88.

[12] Choi J D, Loginov A, Sarkar K.Static data race analysis for multithreaded object-oriented programs[R].IBM Research:Technical Report RC22146,2001.

[13] Cheng J. Slicing concurrent programs-A graph theoretical approach[C]∥Proc of the 1st International Workshop on Automated and Algorithmic Debugging,1993:223-240.

[14] Krnke J.Static slicing of threaded programs[J].ACM SIGPLAN Notices ,1998,33(7):35-42.

[15] Qi Xiao-fang, Xu Bao-wen, Zhou Xiao-yu. An approach to analyzing dependence of concurrent programs based on program reachability graphs[J].Acta Electronica Sinica,2007,35(2):287-291.(in Chinese)

[16] Zhang Long-bing, Zhang Fu-Xin, Wu Shao-gang, et al. A lockset-based dynamic data race detection approach[J].Chinese Journal of Computers, 2003,26(10):1217-1223.(in Chinese)

[17] Fu Hao, Cai Ming, Dong Jin-xiang, et al. Enhanced data race detection approach based on lockset algorithm[J].Journal of Zhejiang University:Engineering Science,2009,43(2):328-333.(in Chinese)

[18] Li Ke-qing, Chen Xin-meng, Zheng Wu-ji.A dynamic detective algorithm based on lockset to solve multithreaded data race[J].Wuhan University Journal of Natural Sciences,2000,46(3):289-292.(in Chinese)

附中文參考文獻(xiàn):

[7] 張昱,郝允允.Java程序數(shù)據(jù)競爭的增量式檢測[J].西安交通大學(xué)學(xué)報(bào),2009,43(8):22-27.

[10] 梅宏,王千祥,張路,等.軟件分析技術(shù)進(jìn)展[J].計(jì)算機(jī)學(xué)報(bào), 2009,32(9):1697-1710.

[15] 戚曉芳,徐寶文,周曉宇.一種基于程序可達(dá)圖的并發(fā)程序依賴性分析方法[J].電子學(xué)報(bào).2007,35(2):287-291.

[16] 章隆兵,張福新,吳少剛,等.基于鎖集合的動態(tài)數(shù)據(jù)競爭檢測方法[J].計(jì)算機(jī)學(xué)報(bào), 2003,26(10):1217-1223.

[17] 富浩,蔡銘,董金祥,等.基于鎖集合算法的增強(qiáng)型數(shù)據(jù)競爭檢測方法[J].浙江大學(xué)學(xué)報(bào)(工學(xué)版),2009,43(2):328-333.

[18] 李克清,陳莘蔭,鄭無疾.一種基于鎖集合的多線程數(shù)據(jù)競爭的動態(tài)檢測算法[J].武漢大學(xué)學(xué)報(bào)(自然科學(xué)版),2000,46(3):289-292.

SONGDong-hai,born in 1987,MS candidate,his research interest includes program analysis.

Aclass-baseddataracestaticdetectionalgorithmforJavamultithreadprograms

SONG Dong-hai,BEN Ke-rong,ZHANG Zhi-xiang

(Department of Computer Engineering,Naval University of Engineering,Wuhan 430033,China)

The widespread use of multithread concurrent programs induces more detrimental data race problems, race detection is very important for improving software quality. Combining data race static detection with static program slicing, a class-based data race static detection algorithm for Java multithread programs is proposed. The algorithm obtains function call-chains by using function calls, analyzes every field of a class, finds out possible data race, reduces the range of program analysis through static program slicing, and removes the impossible data race by considering the necessity of data race. An example demonstrates that the proposed algorithm can guide programmers to fix software data race defects.

multithread program;data race;program slice;static analysis;race detection

2013-10-05;

:2013-12-10

國家自然科學(xué)基金資助項(xiàng)目(61272108)

:賁可榮(benkerong08@21cn.com)

1007-130X(2014)02-0233-05

TP311.55

:A

10.3969/j.issn.1007-130X.2014.02.008

宋東海(1987-),男,湖北咸寧人,碩士生,研究方向?yàn)槌绦蚍治觥-mail:443655536@qq.com

通信地址:430033 湖北省武漢市海軍工程大學(xué)計(jì)算機(jī)系A(chǔ)ddress:Department of Computer Engineering,Naval University of Engineering,Wuhan 430033,Hubei,P.R.China

猜你喜歡
程序分析檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
隱蔽失效適航要求符合性驗(yàn)證分析
試論我國未決羈押程序的立法完善
電力系統(tǒng)不平衡分析
電子制作(2018年18期)2018-11-14 01:48:24
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
電力系統(tǒng)及其自動化發(fā)展趨勢分析
小波變換在PCB缺陷檢測中的應(yīng)用
主站蜘蛛池模板: 婷婷午夜天| 伊人色婷婷| 日韩欧美色综合| 波多野结衣一区二区三区四区| 麻豆国产原创视频在线播放| 色爽网免费视频| 毛片久久网站小视频| 天天做天天爱夜夜爽毛片毛片| 欧美专区日韩专区| 性激烈欧美三级在线播放| 国产欧美精品一区二区| 天天做天天爱天天爽综合区| 四虎永久在线| 毛片大全免费观看| 91精品啪在线观看国产91| 成人一级黄色毛片| 3344在线观看无码| 婷婷六月色| 欧美在线一二区| 久久网综合| 成人福利在线视频| 成人无码区免费视频网站蜜臀| 亚洲色图欧美激情| 天天色天天操综合网| 91福利在线观看视频| 久久亚洲国产一区二区| 久久这里只有精品66| 日本欧美精品| 91视频区| 亚洲IV视频免费在线光看| 亚洲精品自在线拍| 日本成人在线不卡视频| av天堂最新版在线| 色婷婷亚洲综合五月| 美女国内精品自产拍在线播放| 日韩第一页在线| 日本欧美一二三区色视频| 亚洲 日韩 激情 无码 中出| 97久久超碰极品视觉盛宴| AV在线天堂进入| 精品久久久久久中文字幕女| 亚洲伦理一区二区| 久久精品这里只有国产中文精品| www.国产福利| 在线日本国产成人免费的| 亚洲第一成年人网站| 在线精品亚洲一区二区古装| 久久a级片| 欧美日韩久久综合| 国产欧美日韩视频一区二区三区| 亚洲一级毛片在线观| 91久久精品日日躁夜夜躁欧美| 精品久久久久成人码免费动漫| 欧美a在线看| 日韩毛片免费观看| 97超碰精品成人国产| 久久国产亚洲欧美日韩精品| 久久www视频| 国产精品自在在线午夜区app| 99热免费在线| 欧美曰批视频免费播放免费| 日韩精品亚洲精品第一页| 免费视频在线2021入口| 99er精品视频| 中文字幕亚洲电影| 国产日韩欧美在线视频免费观看| 成人国产一区二区三区| 99re经典视频在线| 日韩av在线直播| 性视频久久| 国产中文一区二区苍井空| 国产高清毛片| 亚洲欧洲综合| 亚洲中文字幕在线一区播放| 色吊丝av中文字幕| 日韩精品欧美国产在线| 亚洲午夜18| 国产小视频在线高清播放| 不卡无码h在线观看| 日韩在线视频网| 成人精品免费视频| 国产在线一区视频|