线程安全测试

Posted

技术标签:

【中文标题】线程安全测试【英文标题】:Thread Safety Testing 【发布时间】:2011-06-20 17:21:15 【问题描述】:

我目前使用 google 的 gtest 来编写我的单元测试,但它看起来不能测试线程安全性(即从多个线程访问某些内容并确保其行为符合规范)。

你用什么来测试线程安全?我想要一些跨平台的东西,但是,它肯定至少可以在 Windows 上运行。

谢谢!

【问题讨论】:

我不是 MT 专家,但我不认为你可以自动化 MT 设计测试,整个事情是不确定的。 不过应该​​可以检查某些“合同”。 Testing approach for multi-threaded software 的可能重复项 请注意,测试 MT 软件通常是一个非常困难的问题。另见***.com/questions/2059895/… 和***.com/questions/2035890/… 【参考方案1】:

如果多线程代码不能立即证明是正确的,那么它几乎肯定是错误的。如果是,则无需测试。

说真的:共享可变状态应该是非常本地化和罕见的,并且这样做的类应该是正确的。

您的线程通常应该通过安全原语(例如线程安全工作队列)进行交互。如果您的代码周围散布着大量数据结构,每个数据结构都有自己的锁定策略,那么您的代码几乎肯定包含死锁和竞争条件。大量的测试工作只会发现一些问题。

【讨论】:

以上是关于线程安全测试的主要内容,如果未能解决你的问题,请参考以下文章

如何测试线程安全[重复]

Java:测试对“非线程安全”方法的线程访问

List 集合线程安全测试

如果我只想以线程安全的方式测试和设置标志,那么线程类是啥?

在Java中测试线程安全[重复]

我是怎样测试Java类的线程安全性的