gpt4 book ai didi

c - 如何测试无锁队列是否正确实现?

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:15 30 4
gpt4 key购买 nike

我使用 GCC __sync_xxx_compare_and_swap 原子内置实现了一个无锁队列。现在我想确保我的代码是正确的。所以我启动了多个线程用于入队和出队,并尝试:

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

我发现上面两个结果都是正确的,但是如何验证入队顺序和出队顺序完全一致呢?或者,有什么方法可以检查我的实现是否正确?

最佳答案

尝试 Helgrind: a thread error detector .它是 Valgrind 的一部分。请务必阅读联机帮助页以了解除默认选项外还可以启用的额外功能。

至于检查重新排序

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

当程序退出时,您应该能够在日志文件中匹配入队和出队。

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

关于c - 如何测试无锁队列是否正确实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18754032/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com