小编btr*_*tty的帖子

如何使用 rand_r() 在 C 中创建线程安全的随机数生成器?

我被要求不要使用,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)

c random multithreading

2
推荐指数
1
解决办法
6446
查看次数

标签 统计

c ×1

multithreading ×1

random ×1