我需要在boost(从int加载)中为随机数发生器播种几个进程,这个程序必须在Windows和Linux中编译和工作。
我使用std:time(0)
,但是由于进程是同时运行的作业,其中一些会在同一秒运行,产生相同的结果。
所以我需要从毫秒或其他任何跨平台的随机生成器。 我试过clock()
但不能完全让它从time_t
转换为int。
谢谢。
如果你从一个脚本开始所有的工作。
然后你可以在命令行上传递一个递增的数字作为参数。 每个作业然后将此值添加到time()的结果中以生成其种子。
注意:我没有看到OP有关安全的任何要求。
原代码使用时间(NULL),这将有一个猜测种子。
int main(int argc,char* argv[]) { srand(time(NULL) + boost::lexical_cast<int>(argv[1])); // STUFF }
您可能最好使用平台特定的随机数字源。 在Linux上,使用/dev/urandom
并读取几个字节。 在Windows上,获取熵的几个字节的简单方法是UuidCreate
。