最終確認日
排他制御
排他制御(mutual exclusion)とは、複数の処理(スレッドやプロセス)が同時に共有リソースへアクセスしないようにする仕組みである。これにより、レースコンディションやデータ破壊を防ぐ。
なぜ必要か
- プログラムにおいて共有リソース(例: メモリ領域、ファイル、ソケットなど)を複数の処理が同時に変更しようとすると、予期せぬ結果になる。
- そのため、ある処理がリソースを使っている間は、他の処理がアクセスできないようにする必要がある。
主な排他制御の手段
名前 | 説明 |
---|---|
ロック (Lock) | 明示的に「ロック」と「アンロック」を行う制御。 |
ミューテックス (Mutex) | スレッド間の排他制御用ロック。通常1つのスレッドだけがロック可能。 |
セマフォ (Semaphore) | 複数スレッドに「制限付きで」同時アクセスを許可。カウント付き。 |
モニタ (Monitor) | オブジェクトに紐づけて排他制御を行う高レベル構造。JavaやC#で使用。 |
例えばなし
1つしかないトイレに複数人が来たとする。
- 誰かが入っている間は「使用中」の札が出て他の人は入れない。
- これが「排他制御」である。
注意点
- デッドロック:複数の処理が互いにロックの解除を待ち合い、永遠に停止する状態。
- ライブロック:互いに譲り合いすぎて、結果的に何も進まない。
- スレッド飢餓:一部のスレッドが常に待たされ、実行されない。

公開日
更新日