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

时间:2015-04-17 21:44:44

标签: c++ multithreading thread-safety openmp prng

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

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

我的问题与另一个问题非常相关,我想从coninuum U [0,1]中略有不同。另外,我不知道如何通过线程种子生成器,有人可以写一行代码吗?

2 个答案:

答案 0 :(得分:7)

根据已经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);
}

答案 1 :(得分:1)

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

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