Search code examples
c++multithreadingthread-safetyopenmpprng

C++ thread-safe uniform distribution random number generation


I have a loop. Inside the loop, in each iteration, I need to draw a number from U[0,1]. How can I use openmp, and also make sure that the random number generating process is not contaminated?

I got suggestion that I need a thread-safe random number generator, which may or may not be the solution to my problem.

My question is very related to another one, with a slight difference that I want to draw from a coninuum U[0,1]. Additionally, I don't know how to seed generator by thread, can someone please write a line of code?


Solution

  • Based on the already mentioned solution, here is a version adapted to your specific needs:

    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);
    }