我在并行处理for循环中的成员函数调用时遇到问题。我只想并行化对象的迭代,而不是调用的函数中向量的迭代。
这就是我所说的并行部分,其中particle_vector
是对象的向量,而build_state_pylist()
是成员函数。 state_vec
和state_pylist
都是对象成员。
#pragma omp parallel for
for (int i=0; i < n_sims; ++i) {
particle_vector[i].build_state_pylist();
}
build_state_pylist()
遍历state_vec
的值,void Particle::build_state_pylist() {
for (auto sim_iter = state_vec.begin(); sim_iter != state_vec.end(); ++sim_iter) {
auto sim_vec = *sim_iter;
for (auto vec_iter= sim_vec.begin(); vec_iter!= sim_vec.end(); ++vec_iter) {
this->state_pylist.append(*vec_iter);
}
}
是向量的std :: vector。包含的值,并将它们附加到state_pylist,这是对象的成员boost :: python :: list。
double free or corruption (!prev)
}
由于每个循环迭代仅访问每个对象中包含的内存,因此我认为并行化此部分不会有问题。但是我得到这个错误:
(core dumped)
和
SENTRY_ENVIRONMENT
循环无需并行化即可工作。任何帮助将不胜感激!