私は特定の条件を待つことを試みています。これがどのように最もうまくいったかについてアドバイスをしたいと思います。私はview
変数に読み込まれたファイルを、更新しています、ゴルーチンでチャンネルまたはsync.Condを使用して条件を待つ
type view struct {
timeFrameReached bool
Rows []*sitRow
}
:私はこの(簡体字)のように見える構造体を持っています。行数が増加し、timeFrameReached
は最終的にtrue
になります。
他の場所で、私は本当のことを、以下の条件を待ちたい:
view.timeFrameReached == true || len(view.Rows) >= numRows
私はチャンネルを習得しようとしていますし、Goの条件変数がどのように働くか、と私は最善の解決策はここにあるものを知っていただきたいと思います。理論的には、私はこれのような簡単なことをすることができます:
しかし、それは明らかにナイーブな解決策です。 numRows
という値はHTTPリクエストから来るので、条件メソッドは難しいようです。ゴルーチンは、条件をブロードキャストするタイミングを知らないため、探している行の数が分からないためです。
これは良い考えです。私はまた思いついた別のアイデアを投稿しました。 – Josephus
これは実行可能な解決策ですが、ミューテックスを使用すると結果的にスケーラビリティが得られないという経験から、カプセル化が困難な詳細なグローバルな知識が必要な場合があります。グルーオンとチャンネルは複合要素を形成します(これはCSPの中核的機能です)。これは、このような場合に代わりに使用しようとする理由です。 –