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