A.20 Vinculação de diretivas barrier
Regras de ligação diretriz chamada para um barreira diretiva para vincular a colocar mais próximo parallel diretiva. Para obter mais informações sobre vinculação de diretiva, consulte seção 2.8 na página 32.
No exemplo a seguir, a chamada de principal para sub2 é compatível com porque o barreira (em sub3) é vinculado à região paralela em sub2. A chamada de principal para sub1 é compatível com porque o barreira vincula-se à região paralela na sub-rotina sub2. A chamada de principal para sub3 é compatível com porque o barreira não se vincula a qualquer região paralela e será ignorado. Observe também que o barreira sincroniza somente a equipe de threads na região paralela delimitador e nem todos os threads criados na 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);
}