C++ ofstream变量不能出现在OpenMP firstprivate中?

C++ ofstream变量不能出现在OpenMP firstprivate中?,c++,openmp,ofstream,C++,Openmp,Ofstream,代码 流myfile(“文件路径”)的; #pragma omp parallel用于默认(无)计划(动态)firstprivate(myfile)private(i) for(i=0;ifirstprivate通过创建值的线程私有副本来工作。这不适用于流,因为您无法复制它们。仅通过打开多个流就无法安全地写入文件。基本上有两个选项: 拥有共享流,使用#pragma omp critical保护对该流的所有线程访问 ofstream myfile("file_path"); #pragma om

代码

流myfile(“文件路径”)的
;
#pragma omp parallel用于默认(无)计划(动态)firstprivate(myfile)private(i)

for(i=0;i
firstprivate
通过创建值的线程私有副本来工作。这不适用于流,因为您无法复制它们。仅通过打开多个流就无法安全地写入文件。基本上有两个选项:

  • 拥有共享流,使用
    #pragma omp critical
    保护对该流的所有线程访问

    ofstream myfile("file_path");
    #pragma omp parallel for default(none) schedule(dynamic) firstprivate(myfile) private(i)
    for(i=0; i<10000; i++) {
        myfile<<omp_get_thread_num()+100<<endl;
    }
    
    流myfile(“文件路径”)的
    ;
    #pragma-omp并行
    对于(int i=0;i<10000;i++){
    #pragma-omp-critical
    
    myfile无法复制流。
    ofstream myfile("file_path");
    #pragma omp parallel for
    for (int i=0; i < 10000; i++) {
        #pragma omp critical
        myfile << (omp_get_thread_num()+100) << endl;
    }
    
    #pragma omp parallel
    {
        ofstream myfile(std::string("file_path.") + std::to_string(omp_get_thread_num()));
        #pragma omp for
        for (int i=0; i < 10000; i++) {
            myfile << (omp_get_thread_num()+100) << endl;
        }
    }