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

Fast multithreaded random sequence in C++

本文关键字:随机 多线程 C++      更新时间:2023-10-16

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

没有多线程,我可以做到:

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

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

主要原因是我需要相同的伪随机数序列,与循环的顺序无关(所以更像是基于循环中的"I")。

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

编辑:

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

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

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

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

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