我的代码中有一个循环
Parallel.For(0, Cnts.MosqPopulation, i => { DoWork() });
但是在DoWork()函数中,有多个对随机数生成器的调用,其定义如下:
public static class Utils
{
    public static readonly Random random = new Random();
}
它是静态实例,因此只播种一次。我可以在整个代码中使用它。
根据 MSDN 和其他 stackoverflow 线程,这不是线程安全的。事实上,我注意到有时我的代码会中断并且随机数生成器开始生成全零(根据 MSDN 文档)。
还有其他的 stackoverflow 线程,但是比较老,而且实现速度很慢。我不能在生成数字上浪费时间,因为该程序是一项科学计算,并且正在运行数百次模拟。
我从 2.0 天开始就没有使用过 .net,我不确定该语言是如何演变成能够制作快速、高效、线程安全的 RNG。
以下是之前的主题:
注意:因为我需要一个快速的实现,所以我不能使用RNGCryptoServiceProvider相当慢的。
注2:我没有最少的工作代码。我什至不知道从哪里开始,因为我不知道线程安全是如何工作的,也不知道 C# 的高级知识。所以看起来我确实在要求一个完整的解决方案。