Поделиться через


A.20 Привязка директив barrier

Директивы вызов правил привязки, a барьер директива, который необходимо привязать к ближайший заключать parallel директива. Дополнительные сведения о привязке см. в разделе директивной Раздел 2.8 на странице 32.

В следующем примере вызов от Главная В sub2 уступчивы поскольку барьер (в sub3привязывает в параллельной области внутри) sub2. Вызов от Главная В sub1 уступчивы поскольку барьер привязывает в параллельной области в процедуре sub2. Вызов от Главная В 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);
}