使用boost :: directory_iterator进行OpenMP并行处理

时间:2018-01-21 11:18:25

标签: c++ boost openmp

我上面有一个代码+错误消息,我无法解决问题。有什么想法吗?

#pragma omp parallel num_threads(3)
#pragma omp for
        for (boost::filesystem::directory_iterator itr(p_c); itr != end_itr; ++itr)
        {
            std::string outputfile = (out_p/itr->path().filename()).string();
            cv::Mat image = cv::imread(itr->path().string());
            ImageContainer imgc = ImageContainer(itr->path().string(), outputfile, image);
            if(!imgc.Image().data)
            {
                std::cout << imgc.Input_Path() << " is not found." << std::endl;
                continue;
            }
            std::cout << "Processing " << imgc.Input_Path() << std::endl;
            streaks_detection(imgc);
        }

关于 directory_iterator 初始化的错误消息。

.../main.cpp:248: error: parenthesized initialization is not allowed in OpenMP 'for' loop
         for (boost::filesystem::directory_iterator itr(p_c); itr != end_itr; ++itr)


                                    ^

1 个答案:

答案 0 :(得分:2)

您不能在工作共享循环中直接使用directory_iterator,因为它不是随机访问迭代器。最简单的方法是std::copyst::vector,然后在向量上执行并行循环。或者,您可以使用锁和手动工作共享,但更难以正确使用。