← C#

LESSON / ARTICLE

スレッドセーフな設計

不変オブジェクト、同期境界、競合状態の検出と回避を学びます。

スレッドセーフとは

複数スレッドから同時に利用されても、オブジェクトの不変条件が壊れず、結果が定義された範囲に収まる設計をスレッドセーフと呼びます。

不変性を利用する

生成後に状態が変化しないオブジェクトは、共有時の同期が簡単になります。可能なら可変状態を減らし、値を新しく作る設計を検討します。

同期境界を明確にする

共有状態を変更する場所を限定し、その操作をlockやInterlockedなどで保護します。ロックの対象と範囲を明確にし、複数ロックの順序を統一します。

検証

通常の単体テストだけでは競合を見逃すことがあります。並行実行を繰り返すテスト、負荷テスト、ログによる状態遷移の観測を組み合わせます。