在haskell中公平并发`map`功能?

时间:2011-05-09 21:17:11

标签: haskell concurrency non-deterministic

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

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

这将按顺序将数据“发送”到每个接收器。我希望不确定地向所有接收者广播。

感谢您提供任何线索。

2 个答案:

答案 0 :(得分:3)

如何使用GHC的并发性?

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

然后确保使用线程RTS(使用ghc -threaded编译)。

答案 1 :(得分: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