1。バイナリセマフォ:
* 概念: バイナリセマフォは、「ロックされた」または「ロック解除」という2つの州のいずれかのいずれかにしかできません。 1つの使用ロックのように機能し、1つのスレッドのみが一度にリソースにアクセスできるようにします。
* メカニズム: 1(ロック解除)の値で初期化されます。スレッドがリソースにアクセスしたい場合、セマフォをチェックします。セマフォのロックが解除されている場合(値1)、スレッドはセマフォを取得し(0-ロックされたものに設定)、リソースへのアクセスを獲得します。リソースにアクセスしたい他のスレッドは、セマフォがロックされていることがわかり、最初のスレッドがセマフォをリリースするまで待たなければなりません。
* ユースケース:
* 相互除外: 一度にコードの重要なセクションにアクセスできるスレッドが1つだけであることを確認します。
* 共有リソースの保護: 複数のスレッドが共有リソースに同時にアクセスできないようにします。
* 単一のリソースへのアクセスの制御: プリンターや共有ファイルなど、単一のリソースへのアクセスを管理する簡単な方法。
2。セマフォのカウント:
* 概念: カウントセマフォは、利用可能なリソースの単位数を表す整数値を持つことができます。限られた数のスレッドを同時にリソースにアクセスできるようになります。
* メカニズム: 利用可能なリソースの初期数を表す正の整数値で初期化されます。スレッドは、セマフォを取得して(その価値を低下させる)リソースにアクセスし、終了時にセマフォ(その値を増やす)を解放できます。
* ユースケース:
* リソースプーリング: 限られたリソース(データベース接続、スレッドなど)のプールを管理し、特定の数のスレッドのみがいつでもアクセスできるようにします。
* 並行性制御: システムで実行できる同時タスクの最大数を制御し、リソースの疲労を防ぎます。
* プロデューサーと消費者の問題: データを生成するスレッド間を調整し、消費者がまだ利用できないデータにアクセスしようとしないようにすることにより、データを消費するスレッドを調整します。
重要な注意:
これらは主なタイプですが、待機キューの処理方法に基づいて「強い」および「弱い」セマフォなどの他のバリエーションがあります。ただし、重要な区別は、バイナリとカウントセマフォのカウント方法にあります。リソースアクセスを管理します。
