A.12 Verwenden der atomaren Direktive

Im folgenden Beispiel werden Racebedingungen (gleichzeitige Aktualisierungen eines Elements durch mehrere Threads von x ) durch die atomic-Direktive (2.6.4 Abschnitt auf Seite 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);
    }

Der Vorteil der Verwendung der atomic-Direktive in diesem Beispiel besteht darin, dass Aktualisierungen von zwei verschiedenen Elementen von x ermöglicht, dass parallel ausgeführt.Wenn critical-Direktive (2.6.2 Abschnitt stattdessen auf Seite 18) verwendet wurden, dann würden alle Aktualisierungen auf die Elemente von x seriell ausgeführt (obwohl nicht in einer garantierten Reihenfolge).

Beachten Sie, dass die atomic-Direktive nur für C- oder C++-Anweisung unmittelbar nach deren gelten.Daher werden atomar y von Elementen in diesem Beispiel nicht aktualisiert.