C ++中的快速多线程随机序列

时间:2013-02-03 17:54:33

标签: c++ multithreading random

我需要在多线程循环中使用random,但需要通过每个循环使用相同的值,而不管哪个线程正在评估该循环。

没有多线程,我可以这样做:

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

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

主要原因是我需要与循环次序无关的相同序列的伪随机数(因此更像是基于循环中的'i')。

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

修改

结果应该好像是基于种子创建随机列表。并且该随机列表应该在具有索引'i'的循环内使用以获得伪随机值。因此,在循环内,相同的随机数将基于种子在索引“i”处。 (但是整个循环中不应该有一个随机数相同。但是每个程序运行的顺序应该相同。独立于线程数或者哪个线程正在评估循环的一部分。)

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

你需要一个基于计数器的随机生成器,而不是一个同余的生成器。这是一份很好的文件,解释了它们的工作原理:

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