マルチスレッドとはまず、スレッドに関して簡単に説明しておきます。糸、筋道)とは一連の処理の流れのことを言います。複数の処理を平行して行う物をマルチスレッドと呼びますスレッドの概念図シングルスレッドに関しては特に何も説明する必要はないと思います。何か非常に計算に時間のかかる処理があったとします。処理を行っている最中にもユーザーからの入力は受け付けなければならない場合があります。典型例を挙げるとアクションゲーム等がそうです。ユーザーからの入力を受け付けないようではアクションゲームとして成り立ちません。計算に時間のかかる処理を行うスレッドを平行して動かすのが普通です。複数の処理を平行して行うのがマルチスレッドプログラムです。スレッド作成の手順は以下の通りです。スレッドで実行したい処理をメソッドとして記述する。作成したメソッドをThreadStartデリゲートとしてThreadクラスのコンストラクタに渡す。ThreadクラスのStartメソッドを呼び出し、スレッドを開始する。ThreadクラスのJoinメソッドを呼び出し、スレッドの終了を待つ。以下にスレッド作成の例を示します。スレッドの処理内容を記述する。(この例では、ランダムな時間間隔で文字列を出力する。}}実行結果は以下のようになります。(毎回異なる結果になります。3つのスレッドが平行して動いていることが分かると思います。多くの場合、スレッドを直接作ることはありません。)スレッドの新規作成やスレッド間の処理の切り替えは、結構重たい処理で、最小限に抑えたいものです。プールと呼びます)を使います。クラスというものが追加されています。クラスなども便利です。}}実行結果は以下のようになります。(毎回異なる順序で表示されます。3つの処理が平行して動いていることが分かると思います。2)サンプル入力された数値の素因数分解を行うプログラムです。(値が大きくなると素因数分解は非常に時間がかかります。ユーザからの入力を受け付けるスレッドと計算を行うスレッドの2つのスレッドで処理を行います。"素因数分解を行います。"何か数値を入力してください。"(計算途中で何かキー入力を行うと処理を中断します。入力するとプログラムを終了します。計算を中止するかどうか確認する。"計算を中断しました。Console.Write("計算を中止しました。入力されたらプログラム終了。Console.Write("不正な文字列が入力されました。Console.Write("値が大きすぎます。(馬鹿でかい数字を素因数分解しようとすると非常に重たい。}//Factorization}素因数分解を行います。何か数値を入力してください。(計算途中で何かキー入力を行うと処理を中断します。入力するとプログラムを終了します。2q排他制御マルチスレッドプログラムでは、複数のスレッドが1つのデータに対して操作することがあります。意図しない結果になる場合があります。以下の例について考えて見ましょう。複数のスレッドから同時にアクセスされる。個のスレッドを立てる。回インクリメントする。