В С++ 11 есть множество новых генераторов генераторов случайных чисел и функций распределения. Они потоки безопасны? Если вы используете единый случайный дистрибутив и движок среди нескольких потоков, безопасно ли и вы будете получать случайные числа? Сценарий, который я ищу, - это что-то вроде
void foo() {
std::mt19937_64 engine(static_cast<uint64_t> (system_clock::to_time_t(system_clock::now())));
std::uniform_real_distribution<double> zeroToOne(0.0, 1.0);
#pragma omp parallel for
for (int i = 0; i < 1000; i++) {
double a = zeroToOne(engine);
}
}
с помощью OpenMP или
void foo() {
std::mt19937_64 engine(static_cast<uint64_t> (system_clock::to_time_t(system_clock::now())));
std::uniform_real_distribution<double> zeroToOne(0.0, 1.0);
dispatch_apply(1000, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(size_t i) {
double a = zeroToOne(engine);
});
}
с помощью libdispatch.