スレッド間に1つの共有Control.Concurrent.Chan
を持つ同時システムを構築する必要があります。唯一の消費者と多くの生産者が存在するでしょう。 Chan
documentation私は同じチャネルで動作する可能性のある消費者とプロデューサの数について警告が表示されず、ソースコードはMVar
のデフォルトの「安全な」アクセサを使用しているようです。制限があってはならないと思っても安全ですが、わかりません。 私の質問は...複数の読者やプロデューサーにとって、(一般的に)haskellチャンネルが安全かどうか知っていますか?haskellチャンネルは `Control.Concurrent.Chan`は複数の読者/プロデューサにとって安全ですか?
9
A
答えて
11
スレッド数に関係なく安全です。それらは単純なMVarベースのリンクリストです。設計上のトレードオフは、複数の読者に放送する反対のケースを助けるdupChanを可能にする。
Chanはとてもシンプルなので、内部のアイテムの数はカウントされず、上限もありません。だから生産者が消費者を追い越せば、チャンは非常に大きくなります。これが問題であれば、Chanと(MVar Int)を組み合わせることができます。生産者と消費者にChanのアイテムの稼働総数を変更させる。
関連する問題
- 1. 観測者はRxで複数の観測値を安全に聞くことができますか?
- 2. 複数のFileInputStreamで同じファイルにアクセスすることは安全ですか?
- 3. 複数のスレッド間でストリームインスタンスを共有することは安全ですか?
- 4. Socket.IOは複数のチャンネルを購読します
- 5. 複数のスレッドがLookup <TKey、TElement>から読み取ることは安全ですか?
- 6. 安全にWakeLockを複数のアクティビティに実装するには
- 7. Pythonを使ってWebsocket APIチャンネルを購読するには?
- 8. createTextNodeはHTMLインジェクションとXSSから完全に安全ですか?
- 9. JDBCは安全ですか?
- 10. window.screenは安全ですか?
- 11. カピストラーノは安全ですか?
- 12. StrToInt()は安全ですか?
- 13. PhoneGapは安全ですか?
- 14. signed_requestは安全ですか?
- 15. HttpUtility.HtmlEncodeは安全ですか?
- 16. "User.Identity.Name"は安全ですか?
- 17. SecureStringは安全ですか?
- 18. Flex:removeEventListenerは安全ですか?
- 19. 同じページでYUI.addを同じモジュールに対して複数回呼び出すことは安全ですか?
- 20. この単語数はどのように安全ですか?
- 21. スレッドと読み書きメモリはバイトまたは安全ですか?
- 22. SEF URLのmod_rewriteに頼っても安全ですか?
- 23. Haskell:コマンドライン引数をintとして読み込むには?
- 24. 複数のタイプのゴルーチンとチャンネル
- 25. オープンで安全なTCPチャネルはどのくらい安全ですか?
- 26. 複数のHttpWebRequestsで同じCookieContainerを使用しても安全ですか?
- 27. Response.Redirect(Request.Url.AbsolutePath)は常に安全ですか?
- 28. セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?
- 29. このスクリプトを公開するのは安全ですか?初心者質問
- 30. 複数のディスパッチキューブロックを通過するオブジェクトのパラメータにアクセスすることは安全ですか?
よろしくお願いいたします。すべてのスレッドは完了時に1つのメッセージしか送信しないので、上限が存在しないことは私の場合は問題ではありません。これはシンプルな構造ですが、先に進む前に、メインスレッドがN個のメッセージ(Nがスレッドの数である場合)をチャネルから待つようにします。 –
このようなカウントされたバリアは数量セマフォのように見えますが、最初の量(1-N)を使用して、Chanのリンクリスト長をhttp://hackage.haskell.org/package/SafeSemaphoreのMSemまたはMSemNに置き換えることができます。 –
私はhaskellプラットフォームのセマフォについては知らなかった、それを指摘してくれてありがとう。私は確かに彼らとチャンネルを置き換えます。 –