вылетает "openmp parallel for" при циклическом выполнении QList <class> - PullRequest
0 голосов
/ 01 октября 2018

У меня есть класс «MyFITS», содержащий 2D-изображение с камеры с «чипом» детектора.И у меня есть QList, содержащий указатели на несколько изображений с этой камеры.Теперь я хочу распараллелить цикл for следующим образом:

#pragma omp parallel for
for (int chip=0; chip<n; ++chip) {
    QStringList filenames = getFilenames(chip);
    QList<MyFITS*> images;

    // Read in all images from detector 'chip'
    for (auto &it : filenames) {
        MyFITS *image = new MyFITS(it);
        images << image;
    }

    do_some_calculations(images);

    for (auto &it : images) delete it;
}

Это прекрасно работает без директивы #pragma.Однако с директивой #pragma она вылетает в первой строке второй строки for, MyFITS *image = new MyFITS(it).Каждый поток входит в него только один раз.

Я не понимаю этого.Разве все переменные не объявлены в циклах for закрытыми?Какая часть в этом коде не является потокобезопасной?Должно быть, я упускаю из виду нечто очень простое.

Спасибо,

Миша Ширмер

...