【发布时间】:2012-02-07 11:22:07
【问题描述】:
在 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。
【问题讨论】:
标签: c++ thread-safety c++11 openmp grand-central-dispatch