The best way to generate random values in multiple threads is to safely split your random generator every time you fork. In the case of mwc-random, it looks like you will want to do something like gen' <- initialize =<< (uniformVector gen 32 :: IO (Vector Word32)) forkIO $ ... gen' ... gen There is no good reason to share RNG state across threads. Just use a separate RNG state for every thread. This is inherently thread-safe and more performant. If you're forking very frequently, you will want to benchmark the effect of using a more efficient vector type (i.e. Vector.Unboxed instead of Vector) or fewer elements during initialization. On Tue, Oct 10, 2017 at 9:06 PM, Kazu Yamamoto <kazu@iij.ad.jp> wrote:
Hi David,
Thank you for your reply.
I've heard good things about *mwc-random* (https://github.com/bos/mwc- random )
Are there any example code to use mwc-random safely from multiple threads?
// Kazu _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.