之前的文章介绍都是单独使用lockset或是单独使用happens-before关系进行动态数据竞争检测的方法。单纯使用lockset算法,由于不考虑其他的一些同步原语,会导致很多的误报,但是该方法对线程交错不太敏感。单纯使用happens-before关系,该方法对线程交错比较敏感,因此会导致出现很多漏报。因此结合lockset算法和happens-before关系的混合(hybrid)算法由此而生。
Hybrid混合算法的思想主要有两种:
- 首先利用happens-before关系找到所有潜在的并发的访问,然后利用lockset算法验证这些并发访问是否受到公共的锁集保护。
- 首先利用lockset算法找到不受公共锁保护的潜在的并发访问,然后利用happens-before关系推导哪些访问之间没有确定性先后关系。
这篇文章中主要介绍的是第一种混合算法,主要相关的方法包括如下: