《C++(三)--多线程方法总结》
一、利用std::thread 实现多线程
1.针对普通函数的多线程
std::thread thread1(fun1,参数1,参数2,...,参数n);
std::thread thread2(fun2,参数1,参数2,...,参数n);
使用join()函数阻塞等待线程执行完:
thread1.join();
thread2.join();
使用detach()分离子线程,主线程不被阻塞继续执行
thread1.detach();
thread2.detach();
2.针对类的成员函数实现多线程
类名1 *对象1;
类名2 *对象2
std::thread th1(&类名1::成员函数,对象1,参数1,参数2,...,参数n);std::thread th2(&类名2::成员函数,对象2,参数1,参数2,...,参数n);
也可以使用std::ref()函数来引用:
std::thread th1(&类名1::成员函数,对象1,std::ref(参数1),std::ref(参数2),...,std::ref(参数n));
同样可以使用 join()
和detach()
函数来进行操作。
二、利用openmp实现多线程
CMakeLists.txt的写法:
#******openMP 多线程****
find_package(OpenMP REQUIRED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} ")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
包含的头文件:
#include <omp.h>
1.多线程
//设置使用的线程数
omp_set_num_threads(4);
可以使用omp_get_thread_num()
来查看分配的线程号;
#pragma omp parallel {多线程执行的代码;std::cout<<"cnn:"<<omp_get_thread_num()<<std::endl;}
大括号中的代码就会被执行4次,另外可以设置omp_set_num_threads()
来设置线程数
另外可以使用 #pragma omp parallel sections
关键字定义多线程的块:
设置omp_set_num_threads(2)
,定义几个sections就至少设置为多少个线程;
# pragma omp parallel sections{//*****线程1:******//#pragma omp section{代码1;std::cout<<"cnn:"<<omp_get_thread_num()<<std::endl; //查看分配的线程}//*****线程2:******//#pragma omp section{代码2;std::cout<<"cnn:"<<omp_get_thread_num()<<std::endl;}}
2.针对for循环多线程
首先可以设置使用的线程数
omp_set_num_threads(4);
方法1:
使用关键词:#pragma omp parallel for
#pragma omp parallel for
for(int i=0;i<10;i++)std::cout<<"i is :"<<i<<std::endl;
方法2:
先使用 #pragma omp parallel
声明:
再使用#pragma omp for
定义for循环体;
#pragma omp parallel {#pragma omp forfor()#pragma omp forfor()}
错误写法:
#pragma omp parallel {#pragma omp parallel for for()}
《C++(三)--多线程方法总结》相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- 致被套基民:老基民的四点教训七点经验(ZT)
- 集成测试_渐增与非渐增模式优缺点
- JVM学习笔记之四:分代垃圾回收
- 监听列表ListVIew的滑动状态
- php 命名空间实现的原理,php命名空间实现的理解
- php微信自动登录,利用php怎么实现一个自动登录微信并获取昵称的功能
- 核酸检测小程序实战教程
- 创建一个HashMap 集合,存储省份下的城市,key是为省份 value 是为该省份下的城市
- 程序人生 - 座位险和驾乘险有什么区别,买了后者还需要前者吗?
- MySQL联合索引以及索引顺序优化
- 工商银行携手数美科技,赋能数字化业务高质量发展
- HEVC学习-帧内预测-initAdiPattern函数
- MEMS传感器的6大种类简介-传感器专题
- 计算机桌面出现模糊窗口,显示屏模糊,教您怎么解决电脑屏幕模糊
- 【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)
- QCC3040 USB Composite Device: Audio+HID+CDC/虚拟串口
- 二十三、从句_地点原因方式条件状语从句
- 怎么用matlab画双8曲线,MATLAB画双纵轴曲线。
- EagleSite网站建设系列-(PC+WAP)蛋糕面包食品类网站模板 美食点心食品糕点类网站
- 高性能开发十大核心技术