10

私は、C# で並行 .NET データ構造を実装しています (ConcurrentDictionaryなどBlockcingCollection)。異なるスレッドからアクセスするときにオブジェクトをロックすることを忘れないだけではありません。並列実行時間を最大化するには、洗練されたロック戦略が必要です。

CHESSという名前の .NET の体系的な並行性テストのための一種のフレームワークであるツールがあることを私は知っています。

質問: 静的コード分析を通じて同時実行性/スレッド化の問題を検出するツールもありますか? Java用のCheckThreadのようなもの。

4

2 に答える 2

11

以下は、並行プログラミングに役立つ一連のリソースです。これらは、静的ツールとランタイム ベースのツールが混在しています。

Intel Inspector XE/Parallel Studio

Intel は並行開発に役立つ Parallel Studio 内のいくつかのツールを実行しますが、Parallel Advisor は C/C++ 専用です。

ただし、C# の場合は、Inspector XE (以前の Intel Thread Checker) を使用してランタイム スレッド チェックを実行できます。


PRESharp (Microsoft Center for Software Excellence)

ここで言及されているPRESharpと呼ばれるものがあるようです:

今まで聞いたことがありません...過去にいくつかのCドライバーコードを静的に分析するために使用した、似たようなサウンドのPREFastだけです。特別なアクセス権を取得しない限り、他の誰も使用できない Microsoft の内部ツールだと思います。


静的解析ツール

静的分析ツールの大きなリストはこちら (FXCop など)。

ここで言及されている Typemock Racer :

そして注目すべきは、C/C++、Java、または C# コード (NASA による評価) を静的に分析することによって同時実行性の欠陥を検出すると主張する Coverity Prevent です。


WinDBG + SOSEX

並行プログラミングに役立つその他のツールは、Visual Studio デバッガーよりも強力な WinDBG (Windows SDK 内で配布される Windows Debugging Tools の一部) です。

注: システムに Windows Driver Kit 8 をインストールすると、WinDBG と同等の、より強力なユーザー モード デバッガーを Visual Studio 2012 内から使用できるようになりました。

また、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 に答える