4

假设我正在模拟某种网络,并且有一个函数可以在 Chans 列表上广播一个值:

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 回答