Эта конструкция осуществляет немедленный сброс значений разделяемых переменных в память. Таким образом, гарантируется, что во всех потоках значение переменной будет одинаковое. Однако интересно, как же будет проходить работа следующего фрагмента кода?
... a=0; #pragma omp parallel sections { #pragma omp flush(a) #pragma omp section { for(i=0; i<10; i++, a++); } #pragma omp section { for(i=0; i<10; i++, a++); } }// omp sections ...
Будет ли осуществляться взаимоблокировка потоков при работе с переменной a в двух параллельно работающих потоках? Если да, то в чем же тогда отличие от применения конструкции atomic, например, в такой интерпретации:
... a=0; #pragma omp parallel sections { #pragma omp section { for(i=0; i<10; i++) #pragma omp atomic a++; } #pragma omp section { for(i=0; i<10; i++); #pragma omp atomic a++; } }// omp sections ...