【问题标题】:Parallel Random Number Generators并行随机数发生器
【发布时间】:2012-11-30 10:24:41
【问题描述】:

我想知道是否有任何随机数生成器可以并行生成随机数,这样生成的序列之间不应该有依赖关系。

具体来说,如果我有两个任务,每个任务都生成随机数,那么一定没有依赖关系,也没有重叠。

【问题讨论】:

  • 那么一定没有依赖,也没有重叠。 -> 这种情况下没有重叠是什么意思?
  • 无重叠意味着在一个系列中生成的数字在并行生成的另一个系列中不得相同。依赖可以是任何东西(比如种子,或任何因素)。

标签: c# .net random


【解决方案1】:

RNGCryptoServiceProvider 类应该可以满足您的需求。

它的设计比System.Random 的确定性更低,并且也是线程安全的。

更多信息在这里: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx

【讨论】:

    【解决方案2】:

    【讨论】:

    • 感谢塔莱克。它确实创建了线程安全的线程本地随机数。但是我的下一个问题是每个线程生成的随机数是否有任何相关性?一个线程生成的数字与另一个线程的数字重叠的可能性有多大?
    • 如果您创建两个 PRNG 并使用不同的种子,它们的输出或多或少是不相关的。因为如果您有确定性算法,可能很难说“没有相关性”。
    【解决方案3】:

    您可能想查看这篇关于并行生成随机数的文章:

    Getting random numbers in a thread-safe way

    前段时间它帮助我解决了同样的问题。

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 2019-12-15
      相关资源
      最近更新 更多