前言
线程创建很容易,直接调用std::thread,就创建一个新线程了。该线程拿到任务后立即开始执行。
线程的创建者(父线程)必须管理创建的线程(子线程),应该等到子线程完成其任务或者让子线程从自己身上脱离。子线程可以通过复制或引用获取任务执行的参数。
创建和执行线程
现在,更正式的方法创建线程:一个线程获得一个Callable后立即启动它。
Callable是一个行为类似于一个函数的实体。它可以是一个函数,一个函数对象或lambda函数。
函数对象是类的实例,调用操作符()被重载。函数和函数对象之间的关键区别在于,函数对象可以具有状态。
lambda函数(匿名函数)是一个纯函数体,没有名字。它可以在适当的位置调用。lambda函数可以捕获它的调用上下文。这就是为什么他们经常被称为闭包。
不废话了,看个例子吧:
// createThread.cpp#include #include void helloFunction()
{ std::cout << "Hello C 11 from function." << std::endl;
}class HelloFunctionobject
{public: void operator()() const { std::cout << "Hello C 11 from a function object." << std::endl;}
};int main() { std::cout << std::endl; // 线程执行函数 helloFunctionstd::thread t1(helloFunction); // 线程执行函数对象 helloFunctionobjectHelloFunctionobject helloFunctionobject; std::thread t2(helloFunctionobject); // 线程执行 lambda functionstd::thread t3([] { std::cout << "Hello C 11 from lambda function." << std::endl; }); // 确保 t1, t2 and t3 在main函数结束之前结束t1.join();t2.join();t3.join(); std::cout << std::endl;
};12345678910111213141516171819202122232425262728293031323334353637383940414243
所有线程t1、t2和t3将它们的输出写入控制台。
线程t2的工作包任务是一个函数对象,线程t3的工作包任务是lambda函数。
主线程或父进程等待,直到它的子线程完成为止。
让我们看一下输出:
这两个程序的执行结果在两个方面有所不同。首先,子线程将以不同的顺序执行。其次,输出有点乱。因此,在第二次运行中,函数helloFunction的换行符发生在lambda函数调用之后。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339191.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
apache karaf_未来是Apache Karaf上的微服务架构
apache karaf这是Jamie Goodyear的客座博客文章( 博客 , icbts )。 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析师; 他为全球大型组织设计,批判和支持了体系结构。 他拥有纽芬兰…
AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
知行EDI系统主要是用来实现贸易双方的数据交换的过程,这个过程中,贸易双方往往需要根据国际通用的消息格式收发信息,我们称符合国际规范的消息文件为EDI报文,然而不同的公司会结合ERP的接口情况选择不同的集成方式,例如…
android显示绘图动画,Android自定义View绘图实现渐隐动画
实现了一个有趣的小东西:使用自定义view绘图,一边画线,画出的线条渐渐变淡,直到消失。效果如下图所示:用属性动画或者渐变填充(shader)可以做到一笔一笔的变化,但要想一笔渐变(手指不抬起边画边渐隐)&#…
csrf spring_无状态Spring安全性第1部分:无状态CSRF保护
csrf spring如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法。 在这一小系列博客文章中,我们将探索以无状态方式解决与Web相关的安全性问题的几种相对较新的方法。 这第一篇文章是关于保护您的网站免受跨站请求…
python网络编程项目_python网络编程详解
最近在看《UNIX网络编程 卷1》和《FREEBSD操作系统设计与实现》这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要的人,更重要的是方便自己整理思路,加…
android网络转圈,android基于dialog加载时转圈圈很好的demo
【实例简介】这是一个android基于dialog加载时转圈圈很好的完整demo,很适合新手学习,希望对有需要的朋友能得到帮助【实例截图】【核心代码】dialog_anim└── dialog_anim├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├…
spring期刊状态_无状态Spring安全性第2部分:无状态认证
spring期刊状态Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法。 如果您错过了有关CSRF的第一部分,可以在这里找到。 因此,在谈论身份验证时,其全部内容就是让客户端以可验证的方式向服务器标识自己。 通常&…
python3 x默认使用的编码_python3默认使用什么编码
python3默认编码为unicode,由str类型进行表示。二进制数据使用byte类型表示。
字符串通过编码转换成字节码,字节码通过解码成为字符串encode:str --> bytes(推荐学习:Python视频教程)
decode:…
html中写css代码,开发DIV CSS时 先写CSS代码还是先写HTML代码
相信良多LOVE用DIVCSS技术启示重构网页的爱好者友好,在起源学习DIVCSS的时分都邑想一个标题,想晓得DIVCSS妙手或有教育者在开发制作html页面的时刻,下场是先写html照样先写css?带着这…
象棋子 设计模式_通过设计国际象棋游戏了解策略模式
象棋子 设计模式今天,我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式,而不是构建全面的国际象棋游戏解决方案。 策略模式:策略模式被称为行为模式–用于管理对象之间的算法࿰…
入门C语言10问10答
1 如何理解变量与常量?变量与常量相当于数据的可读可写与只读,常量是数据的一种保护机制。在内存分配给程序的内存块中有专门的常量(只读)存储区。2 整型数据的溢出问题任何一种数据类型的数据在计算机中都有它确定的数值表示范围࿰…
mac json格式化工具_简洁好用的工具都是相似的
大家好,我是你们的章鱼猫。不知道大家了不了解 jq 这个工具呢?指的不是 JQuery,而是一个命令行工具。jq 是一个轻量级而且灵活的命令行 JSON 解析器,类似用于 JSON 数据的 sed 工具。我们来看一下使用 jq 处理 json 的基本用法(更…
android 撑满剩余空间,怎么让LinearLayout占据父布局的所有剩余空间
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent"android:paddingBottom"dimen/activity_vertical_margin"androi…
战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
战神4 幕后花絮 概念艺术找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人…
ID生成器 雪花算法
背景:在很多业务场景下,我们都需要一个唯一的 ID 来进行一些数据的交互,那么如何生成这个唯一的 ID 呢?如果在单机的情况下,生成唯一ID,可以利用机器内存的特点,通过内存分配即可。但我们线上的…
2014 android 机型排行,2014年10月十佳Android系统智能安卓手机排行榜单 Note 4第一名...
Android系统手机经过几年的发展,如今已经成了大家购机的首选。但在市面上数量众多的Android家族成员中,那些才是真正值得期待和拥有的机型,或许每个人会有不同的答案。如果你还在几款机型的选择上纠结,那么不妨借助国外媒体Androi…
python anaconda安装_Python - 安装并配置Anaconda环境
$ py --version # 当前默认python版本
Python 3.7.1
$ conda create --name testpy2 python2.7 pandas # 创建名为testpy2的运行环境,并安装pandas包及其依赖包
Solving environment: done
## Package Plan ##
environment location: D:\DownLoadFiles\anaconda3\en…