A.12 utilizzando la direttiva atomica

L'esempio seguente consente di evitare race condition (aggiornamenti simultanee di un elemento di x da più thread) tramite atomic direttiva (parte 2.6.4 nella pagina 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);
    }

Il vantaggio di l atomic la direttiva in questo esempio è che consente agli aggiornamenti di due elementi differenti della x si verifichino numerosi in parallelo.se a critical direttiva (parte 2.6.2 nella pagina 18) sono stati utilizzati invece, quindi tutti gli aggiornamenti degli elementi di x eseguire seriale (sebbene non in qualsiasi ordine garantito).

si noti che atomic la direttiva si applica solo all'istruzione di C++ o c# immediatamente dopo.Di conseguenza, gli elementi di y non vengono aggiornati in modalità atomica in questo esempio.