我目前正在从事一个大型项目,该项目最近发生了很多变化,最突出的是增加了线程支持。
在检查代码时,我已经确定了可能导致竞争条件的部分,如果不是现在,那么将来某个时候。为了防止这种回归,我想编写一个测试,可以可靠地检测该特定区域中的竞争条件,以确保 future 的提交不会导致此错误。
代码中并没有乱七八糟的 sleep() 语句,但它是一个潜在的死锁和竞争雷区,我想确保健壮性。
这个项目完全是用 C 语言编写的。那么,我是否可以编写单元测试来防止竞争条件?
最佳答案
竞争条件本质上是非确定性的结果。如果您不能确保调用序列是安全的,那么引入一些运行时检查来验证协议(protocol)不变量是否得到遵守。然后,至少当它们发生时,您将有故障的证据。
虽然这不能解决您的问题,但它至少为您提供了一个工具来量化问题的严重程度。
如果任何竞争是由应用程序范围之外的事件触发的,那么任何静态分析都需要对其进行建模,以便能够检测到条件。
关于c - 如何编写检查竞争条件的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771592/