В программе на C, использующей OpenMP, я хочу установить флаг, когда какой-либо поток (мне не нужно знать, какой) отвечает условию.Если переменная флага является общей для всех потоков, и флаг инициализируется равным 0 (перед многопоточной частью), и любой поток установит значение равным 1 или 0 (все они всегда равны одному значению), я делаюнужна директива "#pragma omp atomic"?
Например, следующий фрагмент кода:
//DataStruct is self defined data structure
function (DataStruct *data) {
int i,flag=0;
#pragma omp parallel for
for(i=0;i<data->maxval;i++) {
//Do stuff
if (/*check condition*/) {
//data->printMesage is 0 or 1, and doesn't change. It is fixed
//before calling this function
//data->printMesage is also an int variable
flag=data->printMesage;
}
}
//End of for loop. The code is running in
//single thread from here
if (flag) {
//Print message
}
}
Это необходимо перед "flag = data-> printMesage;"добавить директиву #pragma omp atomic?