C#でのマルチスレッド
C#でマルチスレッドアプリを作る。マルチスレッドとはどんなものか、というのは http://www.stackasterisk.jp/tech/dotNet/csharp07_01.jsp を読んで、サンプルを書いてみるとよく分かった。Web開発では余りお目にかかれないと思われる点をメモ。
lock ステートメンツ マルチスレッドで実行する際の、割り込みを遮断する。とりあえずlock ステートメント内の処理を終わって次にいく。 http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_009/cs2_009_04.html の「Column - スレッド切り替えをロックするlockステートメント -」を参考にした。
volatile 修飾子 volatile をつけないとコンパイルされる際に最適化される。コンパイラがある変数に値が入るタイミングの余計な処理を無視してコンパイルしてしまう。変数が複数のスレッドから参照される場合に最適化されないように宣言しておく。 ちなみに英語で volatile は「揮発性の」とか「予測が非常に難しい」とか「気まぐれな」とか言う意味。
Deligates メソッドを参照するための型。リファレンスや解説を文章で読むと分かりにくいけど、コードを書いてみると分かってきた。
Generics Threading 以外でも使うけど(むしろデータをやり取りするWebアプリケーションとかでは使う方がいい)ジェネリック。Java5にも同じ機能がついてちょっと前に話題になった。
List <型名>
とすると、Object 型を保持できるコレクションの要素に決まった型を指定出来る。後で使うときにキャストが不要になるし、実行時エラーも無くなる。
例外の補足 今回は Windows のサービスとして動くコードを書いた。Web開発で留意する例外は勿論、考えられるあらゆる例外に対して対策を考えて実装しないといけない。ネットワーク障害、DB障害、ハードウェア障害、バッファが途切れたとか変になってきた、などなど。サービスが停止する事は許されない。もし例外が発生しても処理データを保持しておき、別のタイミングでまた再試行する。
英単語 多分、日常会話では使わない。 enqueued【形】 待機状態{たいき じょうたい}の dequeue【他動】 待機解除{たいき かいじょ}する
COMでRS-232Cからバッファを取得するところも書きたいのだけど、まだよく分かっていないので後日。