A.20障碍指令绑定
指令的绑定规则要求 障碍 指令绑定到最接近的封闭 parallel 指令。 有关指令绑定的更多信息,请参见在第 32 页的 第2.8部分 。
在下面的示例中,调用从 主 到 sub2 是兼容的,因为 障碍 (在 sub3) 绑定到 sub2 的并行区域。 ,因为 障碍 绑定到子例程 sub2,的并行区域调用从 主 到 sub1 兼容。 调用从 主 到 sub3 是兼容的,因为 障碍 不绑定到任何并行区域并且忽略。 另外请注意 障碍 在为封闭并行区域仅同步。 sub1创建的线程并不是所有的线程团队。
int main()
{
sub1(2);
sub2(2);
sub3(2);
}
void sub1(int n)
{
int i;
#pragma omp parallel private(i) shared(n)
{
#pragma omp for
for (i=0; i<n; i++)
sub2(i);
}
}
void sub2(int k)
{
#pragma omp parallel shared(k)
sub3(k);
}
void sub3(int n)
{
work(n);
#pragma omp barrier
work(n);
}