您好我有以下代码,我用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。我在这做错了什么?感谢
答案 0 :(得分:2)
不确定这是否与编译器版本和配置相关,但while(true){}
terminates
更准确地说,如果你写一个
的循环并且没有终止,您有未定义的行为。
这可能最终不适用于您的情况,但随着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