在OpenMP循环中的共享向量对象上运行std::lower_bound
安全吗?(使用C++11(
下面是一个基本的例子(根据我的代码编辑,不确定它是否真的运行(
// fill range
std::vector<size_t> range;
range.reserve(r_len);
for (size_t i=0; i < r_len; i++) {
range.push_back(i);
}
# pragma omp parallel for
for (size_t i=0; i<a_len; i++) {
double x = //... some calculation
auto lower = std::lower_bound(range.begin(), range.end(), x);
size_t ind = std::distance(range.begin(), lower);
}
好吧,使用std::lower_bound
是安全的,因为它不会修改向量,所以只要没有其他东西修改向量,就可以同时调用它并获得正确的结果。