У меня есть код, который выглядит примерно так:
std::random_device rd;
#pragma omp parallel
{
std::mt19937 gen(rd());
#pragma omp for
for(int i=0; i < N; i++)
{
/* Do stuff with random numbers from gen() */
}
}
У меня есть несколько вопросов:
- Является ли
std::random_device
потокобезопасным? т.е. собирается ли что-то сделать бесполезным, когда сразу несколько потоков называют его? - Это вообще хорошая идея? Должен ли я беспокоиться о перекрывающихся потоках случайных чисел?
- Есть ли лучший способ достичь того, что я хочу (независимые случайные числовые потоки в каждом потоке - я не слишком беспокоюсь о воспроизводимости на данный момент)?
В случае, если это имеет какое-то значение для работы std::random_device
, я в основном работает в Windows, хотя я бы хотел, чтобы код работал одинаково хорошо в Linux и OSX.