ホームページ > バックエンド開発 > Golang > Goで「バッファロック」を作成できますか?

Goで「バッファロック」を作成できますか?

Mary-Kate Olsen
リリース: 2024-11-17 14:33:02
オリジナル
656 人が閲覧しました

Can You Create a

セマフォ: Go のバッファーされたロック パターン

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート