Udostępnij za pośrednictwem


Wiązanie A.20 bariery dyrektyw

Dyrektywa wiążące zasady wywołania dla bariery dyrektywy powiązać najbliższy otaczający parallel dyrektywy.Aby uzyskać więcej informacji na wiążąca dyrektywa, zobacz ppkt 2.8 na stronie 32.

W poniższym przykładzie wywołanie z główne do podrzędny_2 jest zgodny z ponieważ bariery (w sub3) jest powiązana w regionie równoległych podrzędny_2.Wywołanie z główne do jako Unicode jest zgodny z ponieważ bariery wiąże równoległych regionie podprocedury podrzędny_2.Wywołanie z główne do sub3 jest zgodny z ponieważ bariery nie jest powiązana z dowolnym regionie równoległe i jest ignorowana.Ponadto należy zauważyć, że bariery synchronizuje tylko zespołu wątków w otaczającym regionie równolegle i nie wszystkie wątki utworzone w jako Unicode.

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