동일한 "전역 난수 생성기"가 모든 스레드에서 공유 되었습니까? 아니면 각 스레드가 자체 스레드를 가져 오나요?Haskell의 난수 생성기는 스레드로부터 안전합니까?
하나가 공유되면 스레드 안전성을 어떻게 보장 할 수 있습니까? "Monads" chapter of Real World Haskell에 설명 된 getStdGen 및 setStdGen을 사용하는 접근 방식은 안전하지 않습니다.
각 스레드가 독립적 인 제너레이터를 가지고 있다면 두 스레드의 생성자가 연속적으로 빠르게 시작하여 다른 시드를 갖게됩니까? (예를 들어 씨앗이 초 단위 인 경우가 아니라 밀리 초가 괜찮을 수도 있습니다. 데이터 시간에서 밀리 초 단위로 분해하는 방법을 알지 못합니다.
후드에서는 [FUZxxl의 대답] (http://stackoverflow.com/q/7153255/7153364#7153364)과 동일한 기술을 사용합니다. [ 'newStdGen' 문서] (http://hackage.haskell.org/packages/archive/random/latest/doc/html/System-Random.html#v:newStdGen)에는 "[it] [a] pplies가 현재 전역 임의 생성기로 분할되고 결과 중 하나를 업데이트하고 다른 하나를 반환합니다. "구현은 간단합니다. [atomicModifyIORef theStdGen split'] (http://hackage.haskell.org/packages/archive/ 임의/최신/doc/html/src/System-Random.html # newStdGen). –