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);
}
我有一个循环。 在循环内部,在每次迭代中,我需要从 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);
}