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){}
终止
更确切地说,如果你写一个循环
并没有终止,你有未定义的行为。
这可能最终不适用于您的情况,但随着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下一篇: how to create msi installer in VS2010 with custom licence validation