目次
一、サマフォレ
1 はじめに
セマフォは、共有リソースに同時にアクセスするスレッドの上限を制限するために使用されます。駐車場の入口にある駐車可能台数を示す注意喚起の列であり、駐車スペースがある場合のみ入場して駐車することができる、駐車可能台数の上限を管理する機能です。
これを使用する前に、新しいサマフォア オブジェクトを作成する必要があります。その後、スレッドは Acquire メソッドを呼び出して実行するライセンスを取得する必要があります。そうしないと、スレッドはブロッキング キューで待機します。
2. 申請
セマフォ電流制限を使用して、アクセスのピーク期間中にリクエスト スレッドをブロックし、ピーク期間が経過した後にライセンスを解放します。もちろん、これは単一マシンのスレッド数を制限する場合にのみ適しており、スレッド数を制限するだけですスレッド リソースの数 (接続数など) ではありません。
セマフォを使用して単純な接続プールを実装すると、エンジョイモードでの実装と比較して、パフォーマンスと可読性が明らかに向上します
3. 原則
コンストラクター:構築時にセマフォのサイズを渡す必要があります。これは実際にはと呼ばれるaqs シンクロナイザーであり、状態を 3 に割り当てます。
取得:使用するたびに、メソッドを呼び出し、cas を使用して状態数から 1 を減算します。それが 0 未満の場合は、ブロッキング キューにヘッド ノードを作成し、このノードをポイントします。ヘッドを次のように設定します。 -1. 先ほどと同じ aqs ブロックキューです。
Release: release は状態を取得し、cas を使用して状態に 1 を追加し、ヘッド ノードを -1 にして 0 に変更します。次に、後続ノードをウェイクアップして、ロックを取得できるかどうかを確認します。その後、1 つずつウェイクアップしますが、モデル番号がない場合は、1 サイクル後に再びキューに入ります。
二、countdownlatch
カウントダウン ロック。スレッド間の同期連携に使用されます。構築パラメータは待機カウントの初期化に使用されます。await はカウントが 0 に戻るのを待機するために使用され、countdown は 1 ずつカウント ダウンするために使用されます。
最下位層もAQSから継承したシンクロナイザーを維持します。これもコンストラクターによって aqs の状態に直接コピーされますが、他のシンクロナイザーとは異なり、状態が 0の場合はロックを取得でき、状態が 0 の場合はブロックされます。 0より大きい。他のスレッドが呼び出し解放を実行するときは、cas を使用してカウンターを -1 にします。
3、サイクリックバリア
ループ フェンス。スレッドの連携に使用され、スレッドが特定のカウントに達するのを待機し、構築時にカウントを設定し、待機中のスレッドが一致するときに同期が必要な特定の瞬間まで各スレッドが実行されるのを待機する await メソッドを呼び出します。カウント数、実装を続行
カウントダウンラッチに対する利点は、ループ内で実行でき、カウントダウンは 1 回だけ使用できることです。