2015-04-17 2 views
3

У меня есть цикл. Внутри цикла на каждой итерации мне нужно нарисовать число из U [0,1]. Как я могу использовать openmp, а также убедиться, что процесс генерации случайных чисел не загрязнен?C++ поточно-безопасное равномерное распределение случайных чисел

У меня возникло предположение, что мне нужен потокобезопасный генератор случайных чисел, который может быть или не быть решением моей проблемы.

Мой вопрос очень связан с другим, с небольшой разницей, которую я хочу извлечь из coninuum U [0,1]. Кроме того, я не знаю, как генерировать генератор по потоку, может кто-нибудь, пожалуйста, написать строку кода?

+2

Есть причина, вы не можете просто использовать другой генератор случайных чисел для каждого потока? –

+0

Можете ли вы сделать это в случае openmp? – drescherjm

+0

@MarkRansom Я перефразировал свой вопрос. Я думаю, что мне нужна потокобезопасная генерация случайных чисел. – Chen

ответ

5

На основе уже 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

Был уже тема для этого в SO: How do I generate thread-safe uniform random numbers?

В принципе, решение использовать другой генератор случайных чисел для каждого потока, и семена каждый из них с резьбовыми конкретными данными (в данном случае - нить Я бы).

+0

Я проверил это. Моя ситуация очень похожа, но немного другая. Я хотел бы сделать из континуума, т. Е. U [0,1]. Я честно не знаю, как изменить этот код. – Chen

+1

Кроме того, как я засеваю генератор и где я засеваю генератор? – Chen

Смежные вопросы