10

我正在 c# 中实现一个并发的 .NET 数据结构(例如ConcurrentDictionaryBlockcingCollection等等)。这不仅仅是在从不同线程访问时不要忘记锁定对象。它需要复杂的锁定策略来最大化并行执行时间。

我知道有一个工具,一种用于 .NET 系统并发测试的框架,名为CHESS

问题:是否还有一个工具可以通过静态代码分析发现并发/线程问题?像CheckThread 之类的东西是用于 java 的。

4

2 回答 2

11

以下是一组有助于并发编程的资源......它们是静态和基于运行时的工具的混合体。

英特尔 Inspector XE/Parallel Studio

英特尔在 Parallel Studio 中提供了一些有助于并发开发的工具,但他们的 Parallel Advisor 仅适用于 C/C++。

但是对于 C#,您可以使用他们的 Inspector XE(以前称为 Intel Thread Checker)进行运行时线程检查


PRESharp(微软卓越软件中心)

这里似乎提到了一种叫做 PRESharp 的东西:

现在我以前没有听说过……只有听起来相似的 PREFast,我过去曾用它来静态分析一些 C 驱动程序代码。我怀疑这是一种内部 Microsoft 工具,除非您获得特殊访问权限,否则其他人无法使用。


静态分析工具

这里有大量静态分析工具(例如 FXCop)。

和此处提到的 Typemock Racer:

值得注意的是 Coverity Prevent,它声称通过静态分析 C/C++、Java 或 C# 代码(由 NASA 评定)来检测并发缺陷。


WinDBG + SOSEX

其他有助于并发编程的工具是 WinDBG(Windows 调试工具的一部分,分布在 Windows SDK 中),它比 Visual Studio 调试器更强大。

注意:您现在可以在 Visual Studio 2012 中使用功能更强大的用户模式调试器,如果您在系统中安装 Windows 驱动程序工具包 8,它与 WinDBG 相当。

您还可以获取 WinDBG 的插件来扩展它,例如 SOSEX 插件添加!dlk可以帮助识别死锁原因的命令。


并发可视化工具(在 Visual Studio 2010+ 中)

Visual Studio 中有并发可视化工具和与之配套的 SDK。


一般并发编程设计注意事项


视频资源

这是一系列精彩的视频,可为您提供有关调试 .NET 应用程序的一般建议:

于 2012-08-01T19:43:44.893 回答
1

我应该补充:


基于模型的验证

此技术使用应用程序线程原语的正式模型,并尝试断言或反驳该模型具有您想要的属性,例如免于死锁。

使用正式语言(例如Promela )编写模型,然后使用模型检查器(例如Spin )证明模型的属性。

于 2014-06-27T20:20:18.000 回答