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

没有多线程我可以做到:

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

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

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

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

编辑:

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

创建该列表(非多线程)并在多线程循环中使用该初始化列表的效率不会很高。对此有何想法?

最佳答案

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

关于c++ - C++中的快速多线程随机序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14675411/

10-11 22:42
查看更多