c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍
前言
对于c/c++程序员来说,编写跨平台的多线程代码十分的麻烦,因为线程的创建,同步接口在windows/linux平台上差别非常大。好在c++11标准新增了线程库,终于可以编写跨平台的多线程代码了,现在我们就一起了解一下c++11新增了哪些线程相关的类。
std::thread – 创建线程
在创建thread变量的同时,可以传递线程函数所需参数,十分便捷。另外可以通过get_tid()获取线程的tid,通过join等待线程返回,通过detach将线程分离。
std::yield - 线程重调度
当线程在某些情况可以让出当前cpu时间片时,可以调用此函数,以提高其他线程的执行效率。
std::this_thread::sleep_for – 线程睡眠
此函数会阻塞当前线程,直到指定的睡眠时间到达。
std::mutex – 线程间互斥
std::mutex配合std::lock_guard,可以实现在某个作用域进入时自动加锁,退出时自动解锁,也可以手动调用lock/try_lock/unlock来手动控制锁的行为。
std::call_once – 单次调用
某些场景下,我们需要代码只被执行一次,比如单例类的初始化,考虑到多线程安全,需要进行加锁控制。C++11中提供的call_once可以很好的满足这种需求,实用又非常简单。
std::condition_variable – 条件变量
条件变量一般用于等待某个事件发生,需要配合互斥锁一起使用。c++11中没有提供信号量相关的类,需要等到c++20。
std::async +future – 异步运行任务
调用async异步开启一个新的线程执行某个任务,返回的future变量代表任务执行结果,当future.get()返回时,代表任务执行完毕,返回值即任务的返回值。
std::promise – 异步传值
除了在线程函数返回值以外,还可以通过promise对象来设定future对象的值。一个promise实例只能与一个future关联共享状态,当在同一个promise上反复调用get_future会抛出future_error异常。当promise对象调用set_value时,future对象的get即可返回对应值。
结语
以上这些类基本可以覆盖我们平时编写多线程业务逻辑的需求范围,接口简洁易懂,推荐大家使用。
c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍相关推荐
- c++ 异步下获取线程执行结果_异步编排(CompletableFuture异步调用)
1.问题背景 问题:当查询接口较复杂时候,数据的获取都需要远程调用,必然需要花费更多的时间. 假如查询文章详情页面,需要如下标注的时间才能完成: 那么,用户需要4s后才能统计的数据.很显然是不能接受的 ...
- c++ 异步下获取线程执行结果_这份阿里技术官强推的java线程池笔记,建议你看一下
线程池 线程是宝贵的内存资源,单个线程占1MB空间,过多分配易造成内存溢出 频繁的创建及销毁线程会增加虚拟机回收频率.资源开销.造成程序性能下降 因此线程池出现了 线程池的概念 线程容器,可设定线程分 ...
- c++ 异步下获取线程执行结果_前端异步编程的那些事
啊 一.异步编程的运行机制 我们学习Javascript语言的时候就知道它的执行环境是"单线程"的. 所谓"单线程",就是指一次只能处理一个任务.如果有多个任务 ...
- java 多线程,及获取线程执行结果
2019独角兽企业重金招聘Python工程师标准>>> Thread.Runnable 创建多线程 new Thread(new Runnable() {public void ru ...
- jmeter 线程执行顺序_面试官让我说出8种线程顺序执行的方法!我懵了
https://www.cnblogs.com/wenjunwei/p/10573289.html 一.前言 本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止 ...
- shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...
这是java高并发系列第31篇. 环境:jdk1.8. java高并发系列已经学了不少东西了,本篇文章,我们用前面学的知识来实现一个需求: 在一个线程中需要获取其他线程的执行结果,能想到几种方式?各有 ...
- python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...
面试官:如让线程顺序执行? 我:使用Thread的join方法. 面试官:除了join还有别的办法吗? 我:目前只用过join. 面试官:哦,那你了解CountDownLatch吗? 我:不了解,没使 ...
- Linux下获取线程TID的方法——gettid()
如何获取进程的PID(process ID)? 可以使用: #include <unistd.h> pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: fi ...
- java线程条件变量_使用条件变量(多线程笔记)
条件变量属性: 使用条件变量可以以原子方式阻塞线程,知道某个特定条件为真为止.条件变量始终与互斥锁一起使用. 使用条件变量,线程可以以原子方式阻塞,知道满足某个条件为止.对掉件的测试时在互斥锁的保护下 ...
最新文章
- Kafka主题体系架构-复制、故障转移和并行处理
- /dev/tty /dev/ttyS0 /dev/tty0区别
- 华为擎云w510_苹果 iPhone 12 全家桶谍照曝光;华为台式机擎云W510现身官网
- 利用python爬虫(part1)--urllib.request模块
- 拥抱.NET Core系列:MemoryCache 缓存选项
- [小技巧][Java]Arrays.fill() 初始化 二维数组
- 信息学奥赛一本通(2053:【例3.3】三个数)
- 服务器端添加网站,服务器添加网站
- CSS去除按钮激活的高亮边框(Button的点击出现黑色外边框的取消)
- 牛皮啊!竟然可以为Dubbo接口生成文档了!
- 【字符串】【KMP模板--最小循环节总结】
- 10-Python-mapfilter
- 如何在右键新建中添加新建xmind文件
- 【硬石科技】电机系列教学(基于STM32)——舵机的控制
- storm启动报错,storm-ui界面显示不正常
- 三星手机微信下载的文件路径
- mac用u盘安装linux系统教程视频,教你如何用u盘重装mac系统教程
- CNCC2020丨5G边缘智能与智慧城市论坛
- 【Hive任务优化】—— Map、Reduce数量调整
- latex怎样让题号顶格_笔记本-latex写作问题集锦
热门文章
- django models索引_Django(生命周期、每部分详解、路由层)
- 高通固件解包IPQ6000固件解包
- ue linux转dos格式,uestudio中如何把dos格式转为unix
- python 3.4 vc++编译配置_VS2013+OpenCV3.4.2编译
- php编写一个学生类_Python零基础入门之编写测试实例
- python处理数据库_python操作数据库
- 网页脚本基本java语法_JSP 基础语法
- xshell怎么连接windows server_未能连接一个Windows服务 怎么回事
- nodejs png 转 rgb_90行代码,让微信登录界面的地球转起来
- 白名单模板_亚马逊品牌备案常见问题—— 白名单、IP加速器及品牌备案后无法使用A+...