Random 随机数发生器在并联使用时会断开

Random 随机数发生器在并联使用时会断开,random,f#,parallel-processing,Random,F#,Parallel Processing,我有一个程序,我在其中生成了很多随机数,我的程序是非常并行的。然而,当我并行运行它时,它会断开。问题的根源与随机数生成有关,可以通过运行下面的代码来显示(实际上并行运行要比不并行运行慢得多,但它很快就说明了我的问题)。如果只运行一次,它似乎工作正常。但是,如果在F#interactive中重新运行数组创建部分,而不使用“let rnd=System.Random()”,则会得到一个零数组。但是,如果它不是并行的,您可以根据需要多次重新运行它,而不会出现任何问题 let rnd = System.

我有一个程序,我在其中生成了很多随机数,我的程序是非常并行的。然而,当我并行运行它时,它会断开。问题的根源与随机数生成有关,可以通过运行下面的代码来显示(实际上并行运行要比不并行运行慢得多,但它很快就说明了我的问题)。如果只运行一次,它似乎工作正常。但是,如果在F#interactive中重新运行数组创建部分,而不使用“let rnd=System.Random()”,则会得到一个零数组。但是,如果它不是并行的,您可以根据需要多次重新运行它,而不会出现任何问题

let rnd = System.Random()
let arr=Array.Parallel.init 10000000 (fun s -> rnd.NextDouble()) 

关于并行随机数生成,可能有一些我不知道的简单问题。

的文档中提到,实例成员不能保证线程安全


我发现了一个博客条目,其中有一些以线程安全方式使用Random的选项

IIRC,
Random
类不是线程安全的。我建议为每个线程创建一个
Random
,使用当前线程id作为种子。考虑到所有关于它的信息,我开始意识到这个问题是多么愚蠢。第一次它似乎起作用的事实让我很反感