Мне нужно заставить нечетную нить (например, 1,3,5, ...) ждать окончания четной нити (например, 0,2,4, ...) до первой.
Я думал, что смогу использовать pragma omp barrier
, но это не сработает так, как я хочу.
Есть ли способ заставить потоки ждать выполнения условия, чтобы поддерживать их работу?
Часть кода:
#pragma omp parallel reduction(+:totalSum) private(i, tn)
{
tn = omp_get_thread_num();
int lim = 0;
#pragma omp for
for(i = 0; i < 100; i++){
v[i] = i+1;
lim = lim + 1;
partialSum[tn] = partialSum[tn] + v[i];
if(lim == 20){
//make odd threads wait for an even thread to finish before they can finish
totalSum += partialSum[tn];
}
}
}