C++ OpenMP循环中boost::ptr_向量的分配
是否可以在OpenMP循环中填写C++ OpenMP循环中boost::ptr_向量的分配,c++,multithreading,boost,concurrency,openmp,C++,Multithreading,Boost,Concurrency,Openmp,是否可以在OpenMP循环中填写boost::ptr_向量?我能看到如何向ptr\u vector添加“新”条目的唯一方法是通过push\u back(),我认为这不是线程安全的 参见下面的示例(gcc编译:g++ptr_vector.cpp-fopenmp-DOPTION=1)。目前只有g++ptr_vector.cpp-DOPTION=2起作用 #include <boost/ptr_container/ptr_vector.hpp> #include <iostream&
boost::ptr_向量
?我能看到如何向ptr\u vector
添加“新”条目的唯一方法是通过push\u back()
,我认为这不是线程安全的
参见下面的示例(gcc编译:g++ptr_vector.cpp-fopenmp-DOPTION=1
)。目前只有g++ptr_vector.cpp-DOPTION=2
起作用
#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
#ifdef _OPENMP
#include <omp.h>
#endif
int main() {
boost::ptr_vector<double> v;
int n = 10;
# if OPTION==1
v.resize(n);
# endif
int i;
#ifdef _OPENMP
#pragma omp barrier
#pragma omp parallel for private(i) schedule(runtime)
#endif
# if OPTION==1
for ( i=0; i<n; ++i ) {
double * vi = &v[i];
vi = new double(i);
}
# elif OPTION==2
for ( i=0; i<n; ++i )
v.push_back(new double(i));
# endif
for ( size_t i=0; i<n; ++i )
std::cout << "v[" << i << "] = " << v[i] << std::endl;
}
#包括
#包括
#ifdef\u OPENMP
#包括
#恩迪夫
int main(){
boost::ptr_向量v;
int n=10;
#如果选项==1
v、 调整大小(n);
#恩迪夫
int i;
#ifdef\u OPENMP
#布拉格奥姆普屏障
#pragma omp并行专用(i)计划(运行时)
#恩迪夫
#如果选项==1
对于(i=0;i要回答我自己的问题,解决方案是使用replace()函数:
int i;
#ifdef _OPENMP
#pragma omp barrier
#pragma omp parallel for private(i) schedule(runtime)
#endif
for ( i=0; i<n; ++i ) {
v.replace(i,new double(i));
}
inti;
#ifdef\u OPENMP
#布拉格奥姆普屏障
#pragma omp并行专用(i)计划(运行时)
#恩迪夫
对于(i=0;i