C#での、正しいマルチスレッドプログラムの書き方を求めて
注意:.NET Framework 4、Visual Studio 2010に対応してアップデートした記事はこちら→「C#での、正しいマルチスレッドプログラムの書き方を求めて(2011年11月版)」
C#におけるマルチスレッドプログラムの作成方法は、たくさんのホームページで紹介されています。しかし、それらは正しく動いたとしても、それがC#や.NET Frameworkを作成した人々の期待したコードであるかどうかは残念ながら、コードを見るだけでは分かりません。生意気なこと言ってすいません
また、BackgroundWorkerという、簡単に別スレッドを作成してメソッドを実行する方法も用意されてはいますが、それで満足していいのかという欲求もあります。より高度なスレッドの扱い方を会得したい。
そんなとき、やはり頼るべきはMicrosoft謹製 msdnライブラリでしょう。
しかし、実際にmsdnライブラリでマルチスレッドプログラミングついて調べていると、リンクが散らばっていて、どこを見ればいいのか分かりません。
そこで、msdn内のマルチスレッドに関するページをまとめてみました。msdnは重く、検索に時間がかかるので、このページをブックマークしておくと楽だと思います。
前提知識
ただし、マニュアルをいきなり読むだけですっきりとコードを書くことは難しいので、Effective C#や、More Effective C#を読んでおくことをおすすめします。More Effective C#のほうは、3章まるまるマルチスレッドを書くときに注意すべき事項です。
マルチスレッドプログラミングに関するページ一覧 @ msdn.microsoft.com
言語は日本語、.NET Framework のバージョンは3.5のページを掲載しています。英語で読みたい方は、アドレスのja-jpを削除もしくはen-usに変更、.NET Frameworkの他バージョンを基準としたページを読みたい方は、ページ内にある、別バージョンへのリンクをクリックしてください。
- C#プログラミングガイド
-
.NET Framework 開発者ガイド - .NET Framework の拡張開発
- 非同期プログラミングのデザインパターン
- 非同期プログラミングの概要
- IAsyncResultを使用した非同期メソッドの呼び出し
- デリゲートを使用した非同期プログラミング
- イベントベースの非同期パターンを使用したマルチスレッドプログラミング
- マネージ スレッド処理
- マネージ スレッド処理の基本
- スレッドの使用とスレッド処理
- マネージスレッド処理の実施
デッドロックや、競合状態(レースコンディション)について - スレッド処理オブジェクトの機能
この部分に出てくる単語(ミューテックス、セマフォ、ロックなどが分からない場合は、OSについて学習しておくことをおすすめします。)
- 非同期プログラミングのデザインパターン
- コンポーネントのマルチスレッド
-
.NET Framework の概要
重要キーワードアプリケーションドメインについてです。
- .NET Framework の基本開発 - 開発の基本
-
Windows ベースのアプリケーションの作成
フォームアプリケーションを作成するときに、UIが無反応になってしまうのを簡単に防ぐBackgroundWorkerについて - support.microsoft.com内のHOW TO
-
Visual ツールおよび開発言語
- 関連書籍(抜粋) - プログラミング C#
マルチスレッドプログラミング関連トピック
その他の分散しているトピックです
クラスライブラリ
-
.NET Framework クラスライブラリ
マルチスレッドプログラミングに関連するクラス - System.Threading 名前空間
重要なクラスを挙げておきます - タイマー関連
- System.Windows.Forms.Timerクラス(シングルスレッド用、Windowsフォーム用)
- System.Timers.Timerクラス(マルチスレッド用、サーバ用)
- System.Threading.Timerクラス(スレッド用)
情報量がすごい
こうしてmsdnの一覧を作成してみると、その情報量の多さに圧倒されます。また、「マルチスレッド」というキーワードで見ると、トピックがかなりいろいろなところに分散していて、まとめるのが大変でした。
分からない単語に関して
上の一覧中に、出てくる単語、「ポーリング」「ミューテックス」「ロック」「セマフォ」「デッドロック」「競合状態」などといった単語は、msdnを読むだけでもある程度分かりますが、本格的にやるのなら、一度OSの分野として学習しておいた方が、あとあとよいと思います。体系的に学ぶには、「オペレーティングシステムの仕組み 」が基礎から教えてくれる一方で全体を俯瞰することのできる入門書としておすすめです。