Go でのバッファリングされたロック パターンの実装
Go にはバッファリングされたチャネルの概念があり、バッファーが確立されるまでブロックを防ぐチャネルを許可します。満杯。さらに、リソースが特定の数のクライアントに対してロックされる「バッファ ロック」の一般化されたパターンの使用例もあります。
バッファ ロックとしてのセマフォ
バッファロックの実装に適したプリミティブはセマフォです。セマフォは、リソースが使用可能になったときに通知することによって、リソースへのアクセスを制御します。
バッファー チャネルを使用した実装
Go では、セマフォはバッファーされたチャネルを使用して簡単に実現できます。チャネル。例:
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if four other instances of f are already running. semaphore <- struct{}{} // Release the lock upon exiting. defer func() { <-semaphore }() // Perform necessary task here... }
この例では、容量 4 のバッファー チャネル セマフォにより、保護されたリソースに同時にアクセスできるクライアントは 4 つだけになります。ロックを取得するには、クライアントはチャネルに書き込み、バッファがいっぱいの場合はブロックし、チャネルから読み取ることでロックを解放します。
以上がバッファ付きチャネルは Go でバッファ付きロックをどのように実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。