为什么这段代码不起作用? [下面是C中的伪代码]

why isn't this code working? [below is a pseudo code in C]

以下是使用 OpenMP 并行化的 C 伪代码。并行 OpenMP 代码中有什么问题会阻止它像串行代码一样产生正确的结果,您将如何纠正它?

void ccode (float a[], float b[], float c[], int n) {

float x, y ; int i;

#pragma omp parallel for shared (a,b,c,n,x,y) private i

for (i = 0 ; i < n ; i++){

    x = a[i] - b[i] ; 
    y = b[i] + a[i] ;
    c[i] = x * y ;
} 

我觉得问题是

x = a[i] - b[i] ;
y = b[i] + a[i] ;

其中 xy 都应声明为 private,因为每个线程都应使用自己的 xy 对。