我被要求不要使用,rand()因为它们不是“线程安全的”,并且每次也使用不同的种子值。我在 GitHub 上找到了使用如下种子值的示例:
unsigned int seed = time(NULL);
那只有几秒钟的精度。由于程序运行时间不到 1 秒,因此我最终会在每个实例中获得相同的随机数。
我将如何修复此算法,使其仅使用rand_r()或任何其他“线程安全”方法来生成 10 个随机数?
int main()
{
for(int i = 0; i < 10; i++){
int random;
unsigned int seed = time(NULL);
random = 1 + (rand_r(&seed)% 10);
printf("%d\n",random);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)