4

ある種のネットワークをシミュレートしていて、チャンのリストを介して値をブロードキャストする関数があるとします。

broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (send a)

これにより、データが各レシーバーに順番に「送信」されます。代わりに、すべてのレシーバーに非決定論的にブロードキャストしたいと思います。

手がかりをありがとう。

4

2 に答える 2

3

GHC の同時実行性だけを使用するのはどうですか?

broadcast :: a -> [Receiver] -> IO ()
broadcast a = mapM_ (forkIO . send a)

次に、スレッド化された RTS (でコンパイルghc -threaded) を使用してください。

于 2011-05-10T05:15:17.453 に答える
2

http://hackage.haskell.org/package/random-shuffle-0.0.2

broadcast a rs = do 
   g <- newStdGen
   mapM_ (send a) $ shuffle' rs (length rs) g
于 2011-05-09T22:47:58.460 に答える