相关疑难解决方法(0)

我如何使用rand_r以及如何以线程安全的方式使用它?

我正在努力学习如何使用rand_r,在阅读完这个问题之后我仍然有点困惑,有人可以看看并指出我缺少的东西吗?据我所知,rand_r接受一个指向某个值的指针(或一个具有一些初始值的内存),并在每次调用时使用它来生成新数字.每个调用rand_r的线程都应该为它提供一个唯一的指针(或一块内存),以获得不同线程之间的"实际随机"数字.这就是为什么这个:

int globalSeed;

//thread 1
rand_r(&globalSeed);

//thread 2
rand_r(&globalSeed);
Run Code Online (Sandbox Code Playgroud)

是错误的使用方式.如果我有

int seed1,seed2;

//thread 1
rand_r(&seed1);

//thread 2
rand_r(&seed2);
Run Code Online (Sandbox Code Playgroud)

这是在线程之间生成"真随机"数字的正确方法吗?


编辑:阅读上述部分的答案后的其他问题:

  1. 如果在主题1中我需要1到n之间的随机数,我该(rand_r(&seed1) % (n-1)) + 1怎么办 ?或者还有其他常见的方法吗?
  2. 如果动态分配种子的内存是正确还是正常?

c++ random concurrency thread-safety

21
推荐指数
1
解决办法
3万
查看次数

标签 统计

c++ ×1

concurrency ×1

random ×1

thread-safety ×1