我有一个循环。 在循环内部,在每次迭代中,我需要从U [0,1]中绘制一个数字。 我如何使用openmp,并确保随机数生成过程不被污染?
我得到了一个建议,我需要一个线程安全的随机数生成器,它可能是也可能不是我问题的解决方案。
我的问题与另一个问题非常相关,我想从coninuum U [0,1]中略有不同。另外,我不知道如何通过线程种子生成器,有人可以写一行代码吗?
答案 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)为每个线程播种。