排他制御とは「同時に触ってはいけないものを守る仕組み」です
業務・実務でC#を使っている読者のみなさんにとって、 非同期・並列処理は「速さ」と「スケーラビリティ」を手に入れるための強力な手段ですが、 同時に 「同じデータを複数の処理が同時に書き換える」 という危険も抱えています。
- 同じユーザーの残高を、複数の処理が同時に更新してしまう
- 同じファイルを、複数のスレッドが同時に書き込んで壊してしまう
- 同じキャッシュを、複数のタスクが同時に更新して不整合が起きる
こうした問題を防ぐために必要なのが 排他制御(ロック) です。
「この区間は、同時に1つの処理だけが通ってよい」 「このリソースは、同時に1人だけが触ってよい」
というルールをコードで表現するのが排他制御であり、 非同期・並列処理を業務レベルで安全に使うための基盤になります。
ここから、プログラミング初心者の方にも分かるように、 ステップバイステップで「排他制御」の考え方と実装方法を解説し、 lock・SemaphoreSlim・非同期ロックパターン・キーごとのロック・ 注意すべき落とし穴(デッドロック・ボトルネックなど)を含めて 業務向けテンプレートを詳しく紹介していきます。
