下面的 C++ 代码是合法的,还是我的编译器有问题?代码被编译成一个共享库,使用
gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
和 openMP,然后通过 R 2.15.2 调用。
int it=0;
#pragma omp parallel sections shared(it)
{
#pragma omp section
{
std::cout<<"Entering section A"<<std::endl;
for(it=0;it<10;it++)
{
std::cout<<"Iteration "<<it<<std::endl;
}
std::cout<<"Leaving section A with it="<<it<<std::endl;
}
#pragma omp section
{
std::cout<<"Entering section B with it="<<it<<std::endl;
while(it<10)
{
1;
}
std::cout<<"Leaving section B"<<std::endl;
}
}
我获得了以下输出(对于交织来自 2 个线程的输出表示歉意,但我认为它是可以解释的):
Entering section A
Iteration Entering section B with it=0
0
Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5
Iteration 6
Iteration 7
Iteration 8
Iteration 9
Leaving section A with it=10
然后程序停止:B 部分似乎卡在了 while 循环中。由于变量 'it' 是共享的,我不明白为什么当 A 部分完成时 while 循环不会终止。