Go では、バッファー付きチャネルの概念が導入され、バッファーがいっぱいになるまでチャネルがブロックせずにメッセージを受け入れることができます。これにより、同様のパターンをロック メカニズムに適用して、リソースへのアクセスを特定の数のクライアントに制限する「バッファ ロック」を作成できるか?
プリミティブクライアントの同時実行を制限しながら共有リソースへのアクセスを管理するために設計されたものは、セマフォとして知られています。 Go では、セマフォはバッファーされたチャネルを使用して簡単に実装できます。
次のコード スニペットを考えてみましょう。
var semaphore = make(chan struct{}, 4) // limit to 4 concurrent users func f() { // Acquire the lock. Blocks until at most 3 other goroutines are already executing f. semaphore <- struct{}{} // Release the lock when done. defer func() { <-semaphore }() // Perform the protected work... }
ここでは、セマフォはバッファーされたチャネルによって表されます。サイズは 4 で、関数 f を最大 4 つまで同時に呼び出すことができます。 <-セマフォ操作はチャネルから値を取得し、値が使用可能になるまでブロックします。
セマフォは、Go でバッファリングされたロックを実装するためのシンプルで効果的なメカニズムを提供し、限られた数のクライアントによる共有リソースへのアクセスが制御されます。
以上がGoで「バッファロック」を作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。