OpenMP 并行 'for' 无法正常工作

OpenMP parallel 'for' doesn't work properly

以下片段来自我的代码的一个函数:

static int i;

#pragma omp parallel for default(shared) private(i) schedule(static,1)
for (i=0; i<ttm_ic_last; i++)
{
    static int ni, ni1, ni2;
    static double ni_ratio;
    static double temp_e, temp_l;
    ...
}

奇怪的是,当我评论以 #pragma 开头的行时它可以正常工作,否则循环至少不会触及 i 的某些预期值。 (我不确定 'touch' 在这里是否是正确的动词。)

我正在使用带有

的工作站
gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)

我想知道这个错误的原因是什么。

(Stefan 的回答)

当涉及 OpenMP 线程时,不要使用 static 变量。

事实是;对于静力学,它们有一个共享内存 space。所以他们很可能会跨线程互相干扰。你的并行循环都在同一个盒子里。