C ++ RNG:如何在不同的处理器上获得不同的rand生成器?

时间:2016-10-05 12:18:42

标签: c++ algorithm random

如何为随机生成器播种,以便在不同的处理器上有不同的数字序列?

我的第一次尝试是使用处理器的排名作为种子。 然后我发现了srand(0)提供与srand(1)相同序列的艰难方式。

目前,我正在这样做:

srand(time(NULL) + rank)

这是一个好的方法吗?或者,还有更好的方法? 感谢

3 个答案:

答案 0 :(得分:1)

使用rand()初始化time(NULL)生成不同的种子,并将该种子传递给您的进程/线程。是的,请使用与rand()不同的内容。

答案 1 :(得分:1)

在多线程环境中调用time()来为RNG播种是一个问题。线程可以全部获得相同的时间,它们可以获得不同的线程,并且很难控制。像你最初做的那样,使用处理器等级对RNG进行种子处理,但是要么使用与任何种子都表现良好的体面RNG,要么必须使用rand(),只需调整等级以获得稍好的种子,例如等级* 5 + 123;

答案 2 :(得分:0)

如果您在* nix环境中,请使用/dev/random/dev/urandom作为熵源。在Windows上,请致电CryptGenRandom()