【openmp】for循环的break问题

您所在的位置:网站首页 continue可以用于if吗 【openmp】for循环的break问题

【openmp】for循环的break问题

#【openmp】for循环的break问题| 来源: 网络整理| 查看: 265

  问题描述:在用openmp并行化处理for循环的时候,便无法在for循环中用break语句,那么我们如何实现这样的机制呢?在stackoverflow上看到一个不错的回答总结一下。

volatile bool flag = false; #pragma omp parallel for shared(flag) for(int i = 0;i < 100000;i++) { if(flag) continue; if(element[i]...) { ... flag=true; } }

  其中volatile关键字的作用是使得flag变量的改变在所有进程中同步,即保证只要有一个线程将flag改为true,那么从flag值改变的这一刻起所有其他线程的flag值都将变为true,那么所有的线程就不会对element[i]继续进行判断,相当于饶了一个弯实在并行的for中实现了break。

  stackoverflow上针对这个答案还有一个改进版的答案也值得学习一下:

volatile bool flag = false; for(int i = 0;i < 100&&!flag;i++) { int base = i*1000; #pragma omp parallel for shared(flag) for(int j = base;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3