我有一个“ 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循环中声明的所有变量不是私有的吗?这段代码的哪一部分不是线程安全的?我必须忽略一些非常简单的事情。
谢谢
Mischa Schirmer