是否在所有線程之間共享相同的「全局隨機數生成器」,還是每個線程都有自己的?Haskell中的隨機數生成器是線程安全的嗎?
如果共享一個,我該如何確保線程安全?使用getStdGen和的方法setStdGen中描述的"Monads" chapter of Real World Haskell看起來並不安全。
如果每個線程都有一個獨立的生成器,那麼快速連續啓動的兩個線程的生成器會有不同的種子嗎? (他們不會,例如,如果種子是在幾秒鐘內的時間,但毫秒可能是好的,我沒有看到如何從Data.Time獲得毫秒分辨率的時間)。
請注意,在引擎蓋下,它使用與[FUZxxl的答案](http://stackoverflow.com/q/7153255/7153364#7153364)相同的技術; ['newStdGen''s documentation](http://hackage.haskell.org/packages/archive/random/latest/doc/html/System-Random.html#v:newStdGen)指出「[它] [a]將當前的全局隨機生成器拆分,用其中一個結果更新它,然後返回另一個,「它的實現很簡單['atomicModifyIORef theStdGen split'](http://hackage.haskell.org/packages/archive/)隨機/最新/ DOC/HTML/src目錄/系統Random.html#newStdGen)。 –