3

我需要在多线程循环中使用随机数,但在每个循环中都需要相同的值,而与哪个线程正在评估该循环无关。

没有多线程我可以做到:

seed(1)
for (unsigned int i=0; i<100; i++){
     rand()
}

在循环中,每次调用 rand() 时,它都会返回一个新的伪随机值。现在我想创建相同的多线程列表。

主要原因是我需要与循环顺序无关的相同伪随机数序列(所以更像是基于循环内的“i”)。

注意:我经历了许多“随机”和“多线程”主题,但只找到了如何确保数字始终是随机的解决方案,而不是相反。

编辑:

结果应该就好像基于种子创建了一个随机列表。并且应该在索引为“i”的循环中使用该随机列表来获取伪随机值。因此,在循环中,相同的随机数将基于种子位于索引“i”处。(然而,在整个循环中不应该有一个相同的随机数。但是每个程序运行的顺序应该是相同的。与线程数或哪个线程正在评估循环的一部分无关。)

创建该列表(非多线程)并在多线程循环中使用该初始化列表并不是很有效。对此有什么想法吗?

4

2 回答 2

4

使用具有单独可管理状态的任何非 STDC 随机数生成器。我推荐这个: http: //www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html

于 2013-02-03T17:56:51.423 回答
3

您需要一个基于计数器的随机生成器,而不是同余随机生成器。一个很好的文档解释了它们是如何工作的:

http://www.thesalmons.org/john/random123/papers/random123sc11.pdf

于 2013-02-03T17:56:58.667 回答