← C#

LESSON / ARTICLE

並行処理とスレッド

並行処理・並列処理・スレッドの関係と共有状態の問題を学びます。

並行処理と並列処理

並行処理は複数の処理を進行させる構成、並列処理は複数の処理を同時に実行することを指します。複数スレッドは並列実行の手段の一つですが、非同期I/Oは必ずしも専用スレッドを必要としません。

共有状態の競合

複数の処理が同じデータを同時に読み書きすると、実行順序によって結果が変わる競合状態が発生します。単純な加算であっても、読み取り・変更・書き込みが一体で行われるとは限りません。

同期の選択

  • lock:短いクリティカルセクションを保護する。
  • Interlocked:単純な数値更新などを原子的に行う。
  • ConcurrentDictionaryなど:並行利用を想定したコレクションを使う。
  • Channelなど:データを受け渡す構成にする。

注意点

ロックの取り方によってデッドロックが発生することがあります。ロック順序を統一し、ロック中に外部コードや時間のかかる処理を実行しない設計を心がけます。