我使用openmp 2.5在c ++中获得了以下代码:
total = 500;
counter = 0;
#pragma omp parallel
{
while (counter != total) {
#pragma omp barrier
#pragma omp for
for (it = vec.begin(); it < vec.end(); ++it) {
work(*it);
}
}
}
在work()
中,我通过以下方式增加/减少计数器:
void increase() {
#pragma omp atomic
counter++;
}
void decrease() {
#pragma omp atomic
counter--;
}
有时循环永远不会结束但是如果我删除并行编译指示代码,它就可以工作。我怀疑我是以错误的方式实施的。我需要一个openmp代码的专家。