Partilhar via


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);
}