1
为什么此代码生成SIGSEGV异常?我使用QT Creator,C++,Openmp。QT - OpenMP运行时错误SIGSEGV
// myObj : a class name
vector <myObj> objVector;
.......
void MainWindow::drawScreen()
{
omp_set_num_threads(objVector.size());
#pragma omp parallel private (objVector)
{
int id = omp_get_thread_num();
if(id > 0) {
bool collision = false;
int i = id-1;
objVector[i].update();
}
}
this->repaint();
}
MyObj中类:
void myObject::update() {
int x = this->X; **// when I run debugging, SIGSEGV occurs this line!!!!!!!**
int y = this->Y;
}
我不应该共享objVector,因为每个线程都可以改变它的索引。和其他线程不知道这一点。只有主线程应该知道这一点。 – Sdn 2014-11-21 10:29:11
@Sdn根据你发布的代码我没有看到任何并发访问同一元素下给定的索引,因此我想你不需要复制矢量到所有线程,但它取决于你 – 2014-11-21 10:31:41