论文部分内容阅读
随着多核时代的到来,越来越多的程序员将并发机制引入了软件编程中,以提高程序的效率。针对Dacapo软件库的一项调查显示,近2/3的程序中引入了并发机制。然而长期以来,由于并发程序行为的复杂性以及线程切换的不可确定性,如何能够较好地理解以及维护并发程序一直困扰着程序员,其中一个重要的课题便是如何从程序中得到具有原子性质的代码块,以及检测针对这些原子性质的违背情况。许多并发错误,比如原子性违例、以及原子集一致性违例等,都是由于相应的程序原子性质被违背所造成的,因此获取程序中具有原子性质的代码块意义重大。然而,由于这些原子性质往往与程序本身的语义有关,从而它们无法从并发程序中被直接取得。本文给出了一种自动获取程序中原子性质,以及检测这些原子性质违背情况的方法。本文提出以并发操作图来表示程序中的并发行为,并且将频繁子图挖掘算法应用于这些并发操作图,从而得到对应程序原子性质的原子图。随后,本文使用违背检测算法比较原子图以及并发操作图,得到程序中的原子性质违背错误。本文基于以上思想实现了EAGraph工具,并将其应用于10个大型的并发程序,实验结果表明,本工作非常有效,它以较低的误诊率以及极高的效率成功地从目标程序中获取了上百个原子性质,同时识别出了6个真实的并发错误。