這種並行返回的解決方案與它應該返回的解決方案不匹配,就像非並行化的解決方案一樣。在C++中使用OpenMP並行循環
double angle=(PI/180)*atoi(extra);
unsigned int xf;
unsigned int yf;
int j;
#pragma omp parallel for private (j,xf,yf)
for(int i=0;i<width;i++){
for(j=0;j<height;j++){
xf=(unsigned int)ceil(((cos(angle)*(j-(((double)height)/2.0)))-(sin(angle)*(i-(((double)width)/2.0))))+(((double)height)/2.0));
yf=(unsigned int)ceil(((sin(angle)*(j-(((double)height)/2.0)))+(cos(angle)*(i-(((double)width)/2.0))))+(((double)width)/2.0));
if(xf<(unsigned int)height && xf>=0 && yf>=0 && yf<(unsigned int)width){
matrixRed2[yf][xf]=matrixRed[i][j];
matrixGreen2[yf][xf]=matrixGreen[i][j];
matrixBlue2[yf][xf]=matrixBlue[i][j];
}
}
}
我不確定我是否完全遵循了你的代碼,但是當線程計算它們時,'yf'和'xf'的值將不一定會有所不同。 –