特に、私はC++でいくつかのブロッキングキューを持っています。それらのいずれかに私がポップできるアイテムがあるまで待ちたいと思います。golangのselect文はどのように実装されていますか?
私が考えることができる唯一のメカニズムは、入力キューからポップし、元のスレッドが待機できるマスターキューにフィードする各キューに対して別個のスレッドを生成することです。
N個の新しいスレッドを生成し、キューのグループからポップするたびにそれらをすべて終了させるのは、リソースが重いようです。
Golangは私自身のC++コードで実装できるより洗練されたメカニズムを実装していますか?
標準的な機能だけを使って、1つのスレッドで複数の条件変数を待つことはできません。たぶんあなたは問題を逆転させて、キューを積極的に "マスター"キューにプッシュして、ブロッキングスレッドに通知します。 – melak47
Goの選択実装は[ここ](https:// github。com/golang/go/blob/master/src/runtime/select.go)、おそらくそれはあなたにアイデアを与えることができます。 –
https://github.com/tylertreat/chan –