如何为随机生成器播种,以便在不同的处理器上有不同的数字序列?
我的第一次尝试是使用处理器的排名作为种子。
然后我发现了srand(0)
提供与srand(1)
相同序列的艰难方式。
目前,我正在这样做:
srand(time(NULL) + rank)
这是一个好的方法吗?或者,还有更好的方法? 感谢
答案 0 :(得分:1)
使用rand()
初始化time(NULL)
生成不同的种子,并将该种子传递给您的进程/线程。是的,请使用与rand()
不同的内容。
答案 1 :(得分:1)
在多线程环境中调用time()来为RNG播种是一个问题。线程可以全部获得相同的时间,它们可以获得不同的线程,并且很难控制。像你最初做的那样,使用处理器等级对RNG进行种子处理,但是要么使用与任何种子都表现良好的体面RNG,要么必须使用rand(),只需调整等级以获得稍好的种子,例如等级* 5 + 123;
答案 2 :(得分:0)
如果您在* nix环境中,请使用/dev/random
或/dev/urandom
作为熵源。在Windows上,请致电CryptGenRandom()