2011-05-09 33 views
4

说我模拟某种形式的网络,并且具有在陈平的列表广播值的函数:haskell中的公平并发`map`函数?

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

为了这“送”的数据,每个接收器。相反,我想不确定地向所有的接收者进行广播。

感谢您的任何线索。

回答

3

如何只使用GHC的并发?

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

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

+1

当然会引入一些不确定性,对于某些应用程序,我可以看到它是正确的方法。但是我怀疑收到消息的顺序,虽然不确定,但通常会贴近线性顺序。如果你想确保事情混在一起,最好明确地做。 – sclv 2011-05-10 05:52:43

+0

也许在分离每个线程之后还会引入一个随机延迟?您的解决方案对于这种限制性场景很有意义,但我怀疑一旦引入了通信等任何复杂问题,它就不会推广。 – 2011-05-10 06:28:34