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。 我在这里做错了什么? 谢谢


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

更确切地说,如果你写一个循环

  • 没有调用库I / O函数,并且
  • 不访问或修改易失性对象,并且
  • 不执行同步操作(1.10)或原子操作(第29章)
  • 并没有终止,你有未定义的行为。

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


    很有意思。

    我改变了一下代码

    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;
    }
    

    他们都工作得很好。


    gcc在这个问题上存在一个错误,我报告了它,他们会提供修复。 这里是链接:GCC bug

    链接地址: http://www.djcxy.com/p/57373.html

    上一篇: OpenMP strange behaviour

    下一篇: how to create msi installer in VS2010 with custom licence validation