论文部分内容阅读
随着多线程库的日益普及和多核处理器的快速发展,多线程软件技术被越来越多的开发者所使用。而在多线程软件中,并发错误是最难以处理的错误之一,不仅因为线程的调度受到操作系统的影响,而且大量线程之间的交互也使得穷尽测试变得极为困难。在并发错误处理中,存在的另外一个问题是难以重现并发错误。主要的并发错误有死锁、数据竞争、原子性错误。
在本文中,针对原子性错误,本文提出了一种新颖的检测算法。在设计中,本文把验证原子性错误的过程,分为两个阶段。在第一个阶段,通过不断执行被测试的二进制程序,从正确运行的执行序列中抽取原子性代码段。在第二阶段,在得到原子性代码段之后,通过改进的DPOR算法进行验证。在传统的DPOR算法中,由于在程序执行过程中缺少对特定特征的利用,往往存在效率低的问题,而通过观察DPOR算法的执行过程和原子性代码段在验证过程中的特点,提出了一个启发式的算法用来提高DPOR算法的执行效率。由于是程序实际执行,所以可以克服传统的静态分析方法存在误报的缺点。在具体的实现中,设计了在程序的动态执行过程中计算锁信息的方法,在DPOR算法回溯的过程中根据锁信息判断是否可能发生原子性错误,如果可能发生则回溯,如果可以保证不会发生原子性错误则剪除这个回溯分支,从而减少回溯次数和运行时间。在完成工具的设计开发后,通过对一系列开源程序分别在有无原子性错误的条件下进行测试,得到的实验数据证明此方法可以大大提高原子性错误检测的效率。