[發明專利]一種自適應輕量級動態混合數據競爭檢測方法有效
| 申請號: | 202110659412.6 | 申請日: | 2021-06-15 |
| 公開(公告)號: | CN113407447B | 公開(公告)日: | 2022-09-27 |
| 發明(設計)人: | 孫家澤;楊彥漫;舒新峰 | 申請(專利權)人: | 西安郵電大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 710061 *** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 自適應 輕量級 動態 混合 數據 競爭 檢測 方法 | ||
本發明針對并發程序動態數據競爭檢測問題,公開了一種自適應輕量級動態混合數據競爭檢測方法,屬于并發程序測試領域。該方法首先過濾掉線程本地數據訪問和只讀數據訪問,進而只分析共享內存位置,然后為每個共享內存維護兩個歷史訪問信息讀寫隊列,針對讀操作采用自適應輕量級表示方法,當共享內存為讀并發狀態時切換為向量時鐘記錄訪問信息,否則只記錄最后一次訪問信息,使用Happpens?before關系和LockSet算法檢測數據競爭。本發明提供了一種自適應輕量級動態混合數據競爭檢測方法,有助于提高數據競爭檢測準確性,降低檢測代價。
技術領域
本發明屬于軟件測試技術領域,具體涉及到并發程序數據競爭檢測問題,提出了一種自適應輕量級動態混合數據競爭檢測方法。
背景技術
多線程程序在現代程序設計中無處不在,因其可以顯著提高系統計算效率、性能等優點得到了廣泛的應用,但是由于線程交錯執行使得許多并發缺陷難以發現,可能會導致并發程序運行結果正確性或者直接導致系統崩潰。并發程序缺陷檢測在并發程序研究中有著重要地位,尤其數據競爭問題在常見的并發缺陷中占比較大,因此如何準確高效地檢測數據競爭缺陷,成為提高多線程程序可靠性和安全性急需解決的問題。
為了盡可能多檢測數據競爭錯誤,國內外眾多學者致力于數據競爭動態檢測技術研究,在不影響程序運行結果正確性情況下以期能夠以低檢測開銷方式盡可能多的檢測出數據競爭。動態數據競爭缺陷檢測技術主要通過收集被測程序動態執行過程中的相關訪問信息,進而判斷哪些訪問操作構成數據競爭,但是由于線程調度具有不確定性,導致收集到的相關信息不完整,存在漏報和誤報情況且該技術會消耗大量內存資源。為此本發明提出了一種自適應輕量級動態混合數據競爭檢測方法,該方法以低執行開銷高覆蓋率的方式準確有效地檢測數據競爭。
發明內容
動態數據競爭檢測技術,其一主要是將收集到的各線程對共享變量的讀寫訪問信息利用Happens-berfore去驗證是否存在并發訪問,其二主要是利用鎖信息去驗證共享變量在訪問過程中是否受到鎖保護,其三是綜合利用這兩種方法去檢測數據競爭。在使用動態數據競爭檢測過程中,目標是使檢測準確度盡可能提高,而檢測時間和內存開銷盡可能降低。
本發明為一種自適應輕量級動態混合數據競爭檢測方法,如圖1所示,該方法的特征包括以下步驟:
步驟一:針對一個Java并發程序P,在不影響P動態執行過程中,動態數據競爭檢測器為每個共享變量x分別維護兩個長度為Q_LEN=6的讀隊列RCx和寫隊列WCx,RCx和WCx均采用先入先出原則以緩存機制存儲各線程對x的讀訪問信息和寫訪問信息,訪問信息以epoch,LockSet形式存放,用來表示線程t的線程編號、訪問時間戳和當前線程所持有的鎖集合,其中epoch表示為t@c,意為線程t的當前時間戳為c;
步驟二:當線程t對x進行訪問,判斷當前是否為讀訪問,如果不為讀訪問則進入步驟五;否則首先判斷當前x是否已經處于讀共享狀態,如果是讀共享狀態則更新讀向量時鐘Rx為線程t的時鐘向量VCt;否則去判斷t當前讀訪問與RCx最后一個元素存放的讀訪問是否構成并發訪問狀態,如果是則動態數據競爭檢測器自動切換為讀向量時鐘Rx來記錄讀訪問歷史,進入步驟三;
步驟三:遍歷并分析WCx中線程u對x的歷史訪問信息直到最后一個元素,即如果WCx[u]中線程u的時間戳與當前線程t的時間戳VCt[u]不滿足Happens-before關系,且t目前獲得的鎖集與WCx[u].LockSet交集為空集,則報告寫-讀類型數據競爭錯誤,進入步驟四;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安郵電大學,未經西安郵電大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110659412.6/2.html,轉載請聲明來源鉆瓜專利網。





