关键词:
Java并发
数据竞争
静态检测
摘要:
随着云计算、大数据的兴起和各种分布式系统的应用,并发编程也变得越来越流行。然而并发程序编写容易出错,数据竞争就是并发程序中典型的缺陷,它是指多个线程在没有经过同步的情况下同时对共享内存变量进行了访问,并且其中至少有一个写访问。数据竞争在并发程序中经常出现且不易觉察、隐藏较深、难以复现。为了保证系统稳定安全地运行,实习公司提出要设计一款检测Java并发程序中数据竞争问题的检测工具。本文在阅读大量国内外文献的基础上,通过综合运用多种静态分析技术提出了一种能够检测Java并发程序中数据竞争缺陷的静态检测方法,并实现了相应的检测工具。首先,使用soot分析框架将被检测代码转换成易于分析的Jimple中间形式;其次,使用控制流分析和数据流分析对程序执行流程进行建模,构造线程内和线程间的控制流图和函数调用图;再次,定义和提取线程中变量的内存访问事件;然后,使用数据竞争形成条件算法对生成的内存变量访问事件集合进行笛卡尔积运算,判定可能会产生数据竞争的内存变量访问事件。在判定数据竞争的同时对变量访问事件进行并发性分析和别名分析,以降低工具的误报率和漏报率。最后,本文设计和实现了该检测工具,并选取了八个包含数据竞争缺陷的程序作为实验对象,经过实验验证,本论文工具在漏报率、误报率和检测效率上均表现良好,可以有效地检测出Java并发程序中的数据竞争缺陷。