セマフォとは?
せまふぉ
セマフォとは、並列処理において共有リソースへのアクセス数を制限するためのカウンター型の同期機構です。
セマフォ(Semaphore)は、並列処理における同期プリミティブの一つで、共有リソースへの同時アクセス数を管理するためにカウンター(整数値)を使う仕組みです。ダイクストラ(E.W. Dijkstra)が考案し、P操作(wait/acquire)とV操作(signal/release)という2つの基本操作で制御します。
セマフォのカウンターは、利用可能なリソースの数を表します。スレッドがリソースを使用する際にP操作でカウンターを1減らし、使用後はV操作で1増やします。カウンターが0になると次にP操作を試みたスレッドは待機させられます。
セマフォには主に2種類あります。
- バイナリセマフォ(値が0か1): ミューテックスに似た排他制御として機能し、1つのリソースへの同時アクセスを1スレッドに限定する
- カウンティングセマフォ(値が任意の正の整数): 同時に複数のスレッドへのアクセスを許可し、同時接続数の上限管理などに使う
ミューテックスとの違いとして、セマフォはロックしたスレッド以外のスレッドが解放できるため、「生産者・消費者」パターンのようなシグナリング用途にも使えます。具体的には、生産者がデータを生成するたびにV操作でセマフォを増やし、消費者がP操作で待機しながらデータを取り出す、という協調動作が可能です。Javaではjava.util.concurrent.Semaphore、Pythonではthreading.Semaphoreとして実装されています。
使い方・例文
接続プールで同時に10本までDBコネクションを許可する場合、初期値10のセマフォを使い、接続取得時にP操作・返却時にV操作を行うことで同時接続数を制限できます。
この用語をシェア
最終更新: