我必须让一个奇数线程(例如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];
}
}
}