C++ 线程安全的均匀分布随机数生成

C++ thread-safe uniform distribution random number generation

我有一个循环。 在循环内部,在每次迭代中,我需要从 U[0,1] 中提取一个数字。 如何使用openmp,同时确保随机数生成过程不被污染?

有人建议我需要一个线程安全的随机数生成器,这可能是也可能不是我的问题的解决方案。

我的问题与另一个问题非常相关,我想从一个连续统 U[0,1] 中得出一个细微的差别。另外,我不知道如何按线程播种生成器,有人可以写一行代码吗?

SO 中已经有一个主题: How do I generate thread-safe uniform random numbers?

基本上,解决方案是为每个线程使用不同的随机生成器,并使用线程特定数据(在本例中为线程 ID)为每个生成器播种。

在已经 mentioned solution 的基础上,这里有一个适合您特定需求的版本:

double doubleRand(double min, double max) {
    thread_local std::mt19937 generator(std::random_device{}());
    std::uniform_real_distribution<double> distribution(min, max);
    return distribution(generator);
}