Я немного запутался, если есть гонка данных для переменной k
. Насколько я понимаю, только один поток будет выполнять единственную конструкцию, но, поскольку заявлено no wait
, потоки немедленно начнут выполнение конструкции for
. Достаточно ли здесь atomic
, чтобы предотвратить любую потенциальную гонку данных?
#include <stdio.h>
#include <omp.h>
#define Nthreads 8
void main()
{
int n =9, l,k =n,i,j;
k += n+1;
omp_set_num_threads(Nthreads);
#pragma omp parallel default(none) shared(n, k) private(j)
{
#pragma omp single nowait
{
k = k+5;
}
#pragma omp for nowait
for( i =0; i< n; i++)
{
#pragma omp atomic
k +=n+i+1;
}
}
}