我想让一个变量(属于一个进程)在每次新进程启动时获得一个新的随机值。
我需要这个随机生成来让创建的每个进程休眠随机秒数。在我使用的程序开始时srand(time(NULL))
,在我使用的进程运行的函数中
int sleep 时间 = rand() % 16 + 5;//那是因为我需要 5 到 20 之间的值
。
我试图实现这样的事情,但我发现对于每个进程,变量的值都是相同的。
我认为如果我将当前时间(以毫秒为单位)(相应进程开始的时间)作为 srand(..) 的参数,我将获得随机值。问题是我没有找到这方面的任何信息。不同页面上唯一建议的是众所周知的:srand(time(NULL));
(其中 time(NULL) 以秒为单位返回当前时间)。
能否请您建议我一些实现方法?提前谢谢你。
如果您使用的是 Linux,您还可以通过从 /dev/random
中读取来为 PRNG 播种。像这样:
void seedprng() {
unsigned i;
FILE* f = open("/dev/random", "rb");
if (f) {
fread(&i, sizeof(i), 1, f);
fclose(f);
}
else{
printf("falling back to time seeding\n");
i = (unsigned)time(NULL);
}
srand(&i)
}
我是一名优秀的程序员,十分优秀!