我需要在多线程循环中使用random,但需要通过每个循环使用相同的值,而不管哪个线程正在评估该循环。
没有多线程,我可以这样做:
seed(1)
for (unsigned int i=0; i<100; i++){
rand()
}
在循环内,每次调用rand()时,它都会返回一个新的伪随机值。现在我想创建相同的多线程列表。
主要原因是我需要与循环次序无关的相同序列的伪随机数(因此更像是基于循环中的'i')。
注意:我一直在经历许多“随机”和“多线程”主题,但只找到了如何确保数字始终是随机的解决方案,而不是相反。
修改
结果应该好像是基于种子创建随机列表。并且该随机列表应该在具有索引'i'的循环内使用以获得伪随机值。因此,在循环内,相同的随机数将基于种子在索引“i”处。 (但是整个循环中不应该有一个随机数相同。但是每个程序运行的顺序应该相同。独立于线程数或者哪个线程正在评估循环的一部分。)
创建该列表(非多线程)并在多线程循环中使用该初始化列表效率不高。有什么想法吗?
答案 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