У меня есть класс «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 закрытыми?Какая часть в этом коде не является потокобезопасной?Должно быть, я упускаю из виду нечто очень простое.
Спасибо,
Миша Ширмер