C语言 如何测试是否正确实现了无锁队列



我实现了内置GCC __sync_xxx_compare_and_swap原子的无锁队列。现在我想确保我的代码是正确的。因此,我启动了多个线程用于排队和取消排队,并尝试:

  • 测量排队和取消排队操作的数量,并检查它们是否匹配
  • 测量单个元素排队和取消排队的次数,并检查每个元素的该数字是否为 2(1 个排队和 1 个取消排队)

我发现以上两个结果是正确的,但是如何验证排队顺序与取消排队顺序完全相同?或者,有没有办法检查我的实现的正确性?

试试 Helgrind:一个线程错误检测器。这是瓦尔格林德的一部分。请务必阅读手册页,了解除了默认选项之外还可以启用的其他好东西。

至于检查重新订购

  1. 仅生成不同的项目
  2. 在每个线程日志中记录每个线程的每个操作(en- 和取消排队)(该线程中的局部变量,而不是单个全局日志文件!);这不需要同步
  3. 当每个线程即将结束时,将其日志保存在日志文件中。

当程序退出时,您应该能够匹配日志文件中的排队和取消排队。

这比在测试期间记录到单个日志文件(受互斥锁保护)更好,因为它避免了同步瓶颈(这会影响线程动态并可能降低测试的相关性)

相关内容

  • 没有找到相关文章

最新更新