c - 如何编写检查竞争条件的测试?

标签 c multithreading concurrency race-condition

我目前正在从事一个大型项目,该项目最近发生了很多变化,最突出的是增加了线程支持。

在检查代码时,我已经确定了可能导致竞争条件的部分,如果不是现在,那么将来某个时候。为了防止这种回归,我想编写一个测试,可以可靠地检测该特定区域中的竞争条件,以确保 future 的提交不会导致此错误。
代码中并没有乱七八糟的 sleep() 语句,但它是一个潜在的死锁和竞争雷区,我想确保健壮性。

这个项目完全是用 C 语言编写的。那么,我是否可以编写单元测试来防止竞争条件?

最佳答案

竞争条件本质上是非确定性的结果。如果您不能确保调用序列是安全的,那么引入一些运行时检查来验证协议(protocol)不变量是否得到遵守。然后,至少当它们发生时,您将有故障的证据。

虽然这不能解决您的问题,但它至少为您提供了一个工具来量化问题的严重程度。

如果任何竞争是由应用程序范围之外的事件触发的,那么任何静态分析都需要对其进行建模,以便能够检测到条件。

关于c - 如何编写检查竞争条件的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771592/

相关文章:

c - 允许非root应用程序修改/etc中的只读文件

java - 杀死所有线程后退出 Activity android

c - 生产者消费者同步使用两个线程提供不正常的串行输出

java - 你知道一个好的并发谜题网站吗?

C if 语句被跳过

c - 通过calloc分配的多维数组

java - 如何终止多线程中超时的任务?

concurrency - Crystal 郎光纤和网络 socket

Java调试-并发异常

c - 指向二维数组的指针