OpenMP奇怪的行为

时间:2012-02-06 15:59:49

标签: c segmentation-fault openmp

您好我有以下代码,我用gcc(> 4.2)编译了-fopenmp标志:

int main(void)
{
#pragma omp parallel for
    int i; 
    for(i=0;i<4;i++) while(1);

    return 0;
}

我在OSX Lion(版本1.7.3,llvm-gcc 4.2.1)和CentOS 6.2上获得了SIGSEGV。我在这做错了什么?感谢

3 个答案:

答案 0 :(得分:2)

不确定这是否与编译器版本和配置相关,但while(true){} terminates

更准确地说,如果你写一个

的循环
  • 不调用库I / O函数,
  • 不访问或修改易失性对象,
  • 不执行同步操作(1.10)或原子操作(第29条)

并且没有终止,您有未定义的行为

这可能最终不适用于您的情况,但随着C ++ 11变得更加成熟,请注意。

答案 1 :(得分:1)

非常有趣。

我稍微更改了代码 所以

int main(void)
{
int i;
#pragma omp parallel 
  {
        while(1);
    }
    return 0;
} 

等等

inline void func() {
    while (1) ;
}

int main(void)
{
int i;
#pragma omp parallel for 
    for(i=0;i<8;i++) {
        func();
    }
    return 0;
}

他们都工作正常。

答案 2 :(得分:1)

gcc中有关于此问题的错误,我报告了这些错误,他们将提供修复程序。这是链接:GCC bug