Partager via


A.12 Utilisation de la directive atomic

L'exemple suivant évite les conditions de concurrence critique (mises à jour simultanée d'un élément de x par plusieurs threads) à l'aide de la directive d' atomic (section 2.6.4 à la page 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);
    }

L'avantage d'utiliser la directive d' atomic dans cet exemple est qu'elle permet aux mises à jour de deux éléments différents x de se produire en parallèle. Si une directive d' critical (section 2.6.2 à la page 18) était utilisée à la place, toutes les mises à jour des éléments de x seraient exécutés séquentiel (mais pas dans toute commande garantie).

Notez que la directive d' atomic s'applique uniquement à l'instruction C ou C++ qui suit immédiatement elle. Par conséquent, les éléments de y ne sont pas mis à jour atomique dans cet exemple.