__sync_xxx_compare_and_swap
我使用内置的 GCC atomic实现了一个无锁队列。现在我想确保我的代码是正确的。所以我启动了多个线程来入队和出队,并尝试:
- 测量入队和出队操作的数量,并检查它们是否匹配
- 测量单个元素入队和出队的次数,并检查每个元素的次数是否为 2(1 次入队和 1 次出队)
发现上面两个结果都是正确的,但是如何验证入队顺序和出队顺序完全一样呢?或者,有什么方法可以检查我的实现的正确性吗?
__sync_xxx_compare_and_swap
我使用内置的 GCC atomic实现了一个无锁队列。现在我想确保我的代码是正确的。所以我启动了多个线程来入队和出队,并尝试:
发现上面两个结果都是正确的,但是如何验证入队顺序和出队顺序完全一样呢?或者,有什么方法可以检查我的实现的正确性吗?
试试Helgrind:一个线程错误检测器。它是 Valgrind 的一部分。请务必阅读手册页以了解除了默认选项之外可以启用的额外好处。
至于检查重新订购
当程序退出时,您应该能够匹配日志文件中的入队和出队。
这比在测试期间记录到单个日志文件(受互斥锁保护)要好,因为它避免了同步瓶颈(这会影响线程动态并可能使测试的相关性降低)