Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenMP循环中boost::ptr_向量的分配_C++_Multithreading_Boost_Concurrency_Openmp - Fatal编程技术网

C++ OpenMP循环中boost::ptr_向量的分配

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&

是否可以在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>

#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