如何测试线程安全性

tan*_*ius 15 c# testing concurrency multithreading

您对如何测试多线程应用程序有什么建议吗?

我知道,线程错误很难捕获,它们可能随时发生 - 或者根本不发生.测试很困难,结果永远不会确定.当然最好仔细设计和编程并发模块.
尽管如此 - 我不想忽略测试方面.因此,运行大量同时处理相同项目的线程有时会调用线程错误.

任何想法或最佳实践,以获得隐藏线程错误的高命中率?
(我正在使用.Net/C#)

aJ.*_*aJ. 11

您可以使用一些好的工具来测试所有线程问题,如数据竞争,死锁,停滞线程等 .intel-thread-checker就是这样一个很好的工具.

您也可以尝试使用Microsoft Research的CHESS


sam*_*moz 5

如果可能的话,尝试将线程数增加到一个很大的数量,甚至超过在发布中使用的数量.由于运行程序的线程很多,因此在代码上运行更多线程时会出现更多错误.

仔细检查您的声明,锁定,解锁,信号量计数等,并确保它们有意义.

创建测试文档或电子表格,并使用您对代码的了解,考虑可能出现的竞争条件或死锁的位置.

从大厅里抓住一些人并进行"走廊可用性测试"(Joel on Software说我认为?).一般来说,不知道你的程序是什么/关于什么的人将能够轻松地打破它.