export OMP_NUM_THREADS=5
codice:
T t {0};// Inizializzo una classe di nome `t` che contiene un membro inizializzato a 0
#pragma omp parallel
{
//printf("%d", omp_get_num_threads());
t.inc(); // Incremento il membro di uno
}
t.get(); // Stampa il valore interno di t
1) Se tolgo il commento da `printf` t.get() restituisce il valore `5`.
2) Se commento `printf` t.get() restituisce un valore arbitrario fra 3 e 5.
3) Se aggiungo `#pragma omp atomic` nel membro t.get() prima di incrementare non ho problemi e stampa sempre 5.
Come mai?