C++系列11:openmp多线程编程
Posted IE06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++系列11:openmp多线程编程相关的知识,希望对你有一定的参考价值。
我们在系列6里面已经说了多线程(使用std::thread库),然而项目里面竟然还用到了openmp,不得已只能看下。
1. 入门介绍
openmp是由一系列#paragma指令组成,这些指令控制如何多线程的执行程序。另外,即使编译器不支持omp,程序也也能够正常运行,只是程序不会多线程并行运行。
首先要在cmake中添加上openmp,cmake3.9之后内置了openmp,按照下述语句写即可:
然后看一个简单例子:
2. 语法解释
2.1 紧跟for
omp中的for指令用于告诉编译器,拆分接下来的for循环,并分别在不同的线程中运行不同的部分。如果for指令后没有紧接着for循环,编译器会报错。用法如下:
上面的代码其实等价于:
2.2 ordered指令
ordered指令用于控制一段代码在for循环中的执行顺序,它保证这段代码一定是按照for中的顺序依次执行的。
也就是说,在ordered这里会产生堵塞,保证流程按顺序执行。
2.3 sections指令
section指令用于指定哪些程序块可以并行运行。一个section块内的代码必须串行运行,而section块之间是可以并行运行的。如,
#pragma omp parallel sections
{
{ Work1();}
#pragma omp section
{ Work2();
Work3();}
#pragma omp section
{ Work4();}
}
以上是关于C++系列11:openmp多线程编程的主要内容,如果未能解决你的问题,请参考以下文章