C++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。
std::uniform_real_distribution<double> zeroToOne(0.0, 1.0)
并为每个线程使用一个引擎,这样做可以吗? - user1139069