Udostępnij za pośrednictwem


A.12 za pomocą Atomowej dyrektywy

Poniższy przykład pozwala uniknąć wyścigu (aktualizacje jednoczesne elementem x przez wiele wątków) za pomocą atomic dyrektywy (sekcji 2.6.4 na stronie 19):

#pragma omp parallel for shared(x, y, index, n)
    for (i=0; i<n; i++) 
    {
        #pragma omp atomic
            x[index[i]] += work1(i);
        y[i] += work2(i);
    }

Zaletą korzystania z atomic dyrektywy w tym przykładzie jest równe aktualizacje dwóch różnych elementów x występować równolegle.Jeśli critical dyrektywy (sekcji 2.6.2 na stronie 18) były używane zamiast, a następnie aktualizuje wszystkie elementy z x byłyby wykonywane szeregowo (chociaż w dowolne gwarantowana zamówienia).

Należy zauważyć, że atomic dyrektywę stosuje się tylko do instrukcji c lub C++, niezwłocznie po jej.W związku z elementów y nie są aktualizowane w sposób atomowy w tym przykładzie.