c++ - 如何最好地测试 Mutex 实现?

标签 c++ testing concurrency automated-tests mutex

测试互斥量实现是否正确的最佳方法是什么? (有必要实现互斥锁,重用不是一个可行的选择)

我想出的最好办法是让许多 (N) 个并发线程迭代地尝试访问 protected 区域 (I) 次,这会产生副作用(例如更新到全局),这样访问次数 +可以统计写入次数,保证全局的更新次数正好是(N)*(I)。

还有什么建议吗?

最佳答案

对于这种事情,形式化的证明比测试要好。

测试会告诉您——只要您运气不错——一切都有效。但是测试是一种钝器。它可能无法执行导致失败的完全正确的序列。

很难测试硬件中可用的每个可能的操作序列以确保您的互斥锁在所有情况下都能正常工作。

测试并非没有值(value);它表明您没有犯任何明显的编码错误。

但是您确实需要更正式的代码检查来证明它在正确的时间做正确的事情,以便一个客户端自动获取正确互斥锁所需的锁资源。在许多平台中,都有专门的说明来实现这一点,如果您正在使用其中一个,您就有机会做到正确。

同样,您必须证明发布是原子的。

关于c++ - 如何最好地测试 Mutex 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380869/

相关文章:

c++ - 如何计算 Eigen 中 vector 的绝对值?

javascript - 是否有类似 jasmine `toNotContain` 的测试验收标准?

amazon-web-services - 在 AWS Beanstalk 上部署项目后获取通知

Java静态工厂转换

c++ - 这两个位运算符在做什么?

c++ - wstring 上的 Intellisense 显示 : npos = 18446744

c++ - 复制具有 STL vector 类型成员的类的内存

ruby - Rspec: "array.should == another_array"但不关心顺序

c# - NewThreadScheduler.Default 安排同一个线程上的所有工作

java - 使用 volatile long 有什么意义吗?