C++多线程菜鸟教程

线程是程序中的轻量级执行单元,允许程序同时执行多个任务。

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。

一般情况下,两种类型的多任务处理:基于进程和基于线程。

C++多线程编程涉及在一个程序中创建和管理多个并发执行的线程。

C++提供了强大的多线程支持,特别是在C++11标准及其之后,通过标准库使得多线程编程变得更加简单和安全。

C++11及以后的标准提供了多线程支持,核心组件包括:

注意:之前一些编译器使用C++11的编译参数是-std=c++11:

g++-std=c++11test.cppstd::thread

#includestd::threadthread_object(callable,args...);使用函数指针通过函数指针创建线程,这是最基本的方式:

使用g++-std=c++11编译后,执行输出结果为:

Hellofromthread(functionpointer)!Hellofromthread(functionpointer)!Hellofromthread(functionpointer)!Hellofromthread(functionpointer)!Hellofromthread(functionpointer)!使用函数对象通过类中的operator()方法定义函数对象来创建线程:

Hellofromthread(functionobject)!Hellofromthread(functionobject)!Hellofromthread(functionobject)!Hellofromthread(functionobject)!Hellofromthread(functionobject)!使用Lambda表达式Lambda表达式可以直接内联定义线程执行的代码:

Hellofromthread(lambda)!Hellofromthread(lambda)!Hellofromthread(lambda)!Hellofromthread(lambda)!Hellofromthread(lambda)!线程管理join()join()用于等待线程完成执行。如果不调用join()或detach()而直接销毁线程对象,会导致程序崩溃。

t.join();detach()detach()将线程与主线程分离,线程在后台独立运行,主线程不再等待它。

t.detach();线程的传参值传递参数可以通过值传递给线程:

std::threadt(func,arg1,arg2);引用传递如果需要传递引用参数,需要使用std::ref:

以下是一个完整的示例,展示了如何使用上述三种方式创建线程,并进行线程管理。

使用C++11的编译参数-std=c++11:

g++-std=c++11test.cpp当上面的代码被编译和执行时,它会产生下列结果:

线程1、2、3独立运行线程使用函数指针作为可调用参数线程使用函数指针作为可调用参数线程使用函数指针作为可调用参数线程使用函数对象作为可调用参数线程使用函数对象作为可调用参数线程使用函数对象作为可调用参数线程使用lambda表达式作为可调用参数线程使用lambda表达式作为可调用参数线程使用lambda表达式作为可调用参数线程同步与互斥在多线程编程中,线程同步与互斥是两个非常重要的概念,它们用于控制多个线程对共享资源的访问,以避免数据竞争、死锁等问题。

互斥量是一种同步原语,用于防止多个线程同时访问共享资源。当一个线程需要访问共享资源时,它首先需要锁定(lock)互斥量。如果互斥量已经被其他线程锁定,那么请求锁定的线程将被阻塞,直到互斥量被解锁(unlock)。

std::mutex:用于保护共享资源,防止数据竞争。

std::mutexmtx;mtx.lock();//锁定互斥锁//访问共享资源mtx.unlock();//释放互斥锁std::lock_guard和std::unique_lock:自动管理锁的获取和释放。

std::lock_guardlock(mtx);//自动锁定和解锁//访问共享资源互斥量的使用示例:

C++提供了多种锁类型,用于简化互斥量的使用和管理。

常见的锁类型包括:

锁的使用示例:

条件变量用于线程间的协调,允许一个或多个线程等待某个条件的发生。它通常与互斥量一起使用,以实现线程间的同步。

std::condition_variable用于实现线程间的等待和通知机制。

std::condition_variablecv;std::mutexmtx;boolready=false;std::unique_locklock(mtx);cv.wait(lock,[]{returnready;});//等待条件满足//条件满足后执行条件变量的使用示例:

原子操作确保对共享数据的访问是不可分割的,即在多线程环境下,原子操作要么完全执行,要么完全不执行,不会出现中间状态。

原子操作的使用示例:

线程局部存储允许每个线程拥有自己的数据副本。这可以通过thread_local关键字实现,避免了对共享资源的争用。

线程局部存储的使用示例:

死锁发生在多个线程互相等待对方释放资源,但没有一个线程能够继续执行。避免死锁的策略包括:

std::future和std::promise:实现线程间的值传递。

消息队列(基于std::queue和std::mutex)实现简单的线程间通信。

C++17引入了并行算法库(),其中部分算法支持并行执行,可以利用多核CPU提高性能。

THE END
1.c++在线开发编译idec++在线工具(GNU)CoffeeScript,,,CommentatorCommercialConditConvexCoodCOWC++ (gcc)cQuentsCrayonCrystalC# (.NET Core)C# (Mono)CubicallyCubixCyDDashdcDeadfish~Standard 免费AI编程助手 AI无损放大 代码小浣熊 有言AI 在线PS 输入运行代码 1 2 3 4 5 6 7 #include<iostream> usingnamespacestd;https://www.w3cschool.cn/tryrun/runcode?lang=cpp
2.C++:常规用途语言和库MicrosoftLearn无论你是更新旧式代码还是为新平台(如手机)编写全新、高效、高性能的代码,并希望利用 C++,此处提供的轻松方法都可让你从头开始学习 C++ 基础知识。 你将了解 C++ 语言的基础知识、如何高效地使用该语言及其标准库,以及如何使用用于开发 C++ 的 Visual Studio 环境,包括调试、探索代码和理解错误消息。 这是在 C++ https://docs.microsoft.com/zh-cn/shows/cplusplus-language-library/index/
3.国内不容错过的十大线上C++编程培训机构实力排名表7、编程猫 8、北大青鸟 9、国王的艺术 10、小码王在线(排名来源于网络,不分先后) 国内不容错过的十大线上C++编程培训机构实力排名表中,机构都比较正规,大家可以根据需要选择。如果你不知道怎么选择,小编根据家长孩子真实反馈给大家推荐小码王,多年全国连锁大机构,实力保障,课程好,效果好。 https://www.sok100.com/newsdetail/115679.html
4.新课程新形式青少宫线上编程课,让孩子足不出户学编程编程是什么?市面上分哪几类课程? 专业一点讲,编程是一个人类与计算机独立交互的一种方式,打个通俗一点小朋友也听得懂的比方,编程就是跟计算机说话,让计算机可以听懂你的“指挥”,去做你想让它做的“事情”。 编程课程大致可分为三类课程语言:分别为scratch图形化编程、python人工智能编程、c++信息学编程 https://static.nfapp.southcn.com/content/202403/08/c8671185.html
5.西安c++培训班一般学费多少想要在西安学习c++建议大家考虑火星时代教育,火星时代有独特的教学优势,线上线下一体所有线上课程均是汲取线下多所实体班、数万名学员培训经验,经过多年打磨,被证明是科学、成功的课程,现在咨询火星时代官网老师可免费报名试听。 一、西安c++培训班一般学费多少 https://www.hxsd.com/content/30547/
6.周口市十一国庆节面向游客推出多项文旅活动活动内容:为大力弘扬中华优秀传统文化,进一步丰富我县人民群众的精神文化生活,10月7日鹿邑县文化馆特邀请太极拳省级一级教练赵凤莲进行线上展演,让广大群众足不出户就能感受太极拳的恬淡,从容,松柔,开阔,活动形式线上。 7、《C++语言编程—足球场》线上教学 https://hct.henan.gov.cn/2022/09-30/2616491.html
7.计算与软件工程作业四2w1010本次的作业是在我和舍友的合作下共同完成,两人进行结对编程,最后是通过C++语言实现对红楼梦和水浒传简单的按章节的人物统计。中间经历了前期准备、线上结对编程以及后期完善,并将代码托管到了gitee上。 结对编程的过程 第一次体验结对编程,不可否认的是结对编程的的确能够带来很多独自编程没有的好处,它有助于https://www.cnblogs.com/w1010/p/12616351.html
8.少儿编程C++语言介绍今天我们介绍的是少儿编程体系当中的C++语言。C++语言可以说是最经典的编程语言,基本上大学里面的计算机相关专业,C++语言是必学的一门编程语言。 C++语言是什么? 在中国,“C++”常被称为“C加加”,是一种应用非常广泛的计算机程序设计语言。他从C语言发展而来,保留了C语言原有的所有优点,并添加了面向对象的机制。https://www.youkee.com/ziliao/15061.html
9.c++11多线线程系列c++ 11 多线线程系列---使用c++11 lambda创建线程,C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread()https://blog.51cto.com/u_15133569/5666605
10.C++程序设计(第3版)pdfepubmobitxt电子书下载2024根据教学实践的需要,作者对该书进行了两次修订,现在出版的《C++程序设计(第3版)》,内容更加丰富,讲解更加清晰,学习更加容易,依据ANSIC++标准进行介绍,引导读者从一开始就按C++的要求编程,而不是过多地迁就C语言的习惯。全书分为4篇:基本知识、基于过程的程序设计、基于对象的程序设计和面向对象的程序设计。 本书沿https://windowsfront.com/books/11755539
11.青少年编程魔法课堂C++图形化创意编程对于C++的学习者来说,有没有一款类似Scratch简单易学、编程方式直观、趣味性强的开发工具呢?基于这样的想法,笔者从2016年开始,在Dev-C++ 5.x的基础上,结合OpenGL三维动画引擎等技术改进了Dev-C++智能开发平台。该平台入选了全国教育科学“十三五”规划教育部重点课题“中小学智能实验教学系统的构建与应用实践研究”子课https://labs.epubit.com/bookDetails?id=UB7d58d24e8b528
12.ScratchPythonC++,谁才是少儿编程的第一选择?③ 轻松过渡到更复杂的编程语言一旦孩子们建立了编程的基础知识和信心,他们可以轻松过渡到更复杂的编程语言,如Python和C++。此时,他们已经具备了解决问题的基本能力和编程思维,学习新语言将会变得更加顺利。 2、Scratch到底是什么?Scratch想必很多家长都已经很熟悉了,它最大的特点就是易上手,适合初学者。Scratch起初是https://www.meipian.cn/53ctv11w
13.硬核!C++并发编程(C++11到C++17)腾讯云开发者社区C++与并发编程 前面我们已经了解到,并非所有的语言都提供了多线程的环境。 即便是C++语言,直到C++11标准之前,也是没有多线程支持的。在这种情况下,Linux/Unix平台下的开发者通常会使用POSIX Threads,Windows上的开发者也会有相应的接口。但很明显,这些API都只针对特定的操作系统平台,可移植性较差。如果要同时支持Linuxhttps://cloud.tencent.com/developer/article/1876855
14.C++语言程序设计基础清华大学而C++语言是应用最广泛的面向对象的程序设计语言之一。 本课程是一门面向广大初学者的入门课程,自1999年开始在清华大学开设,本课程的教材已经在清华大学等一百多所学校的不同专业中使用,取得了良好的教学效果。 本课程将C++语言作为大学生的计算机编程入门语言,不仅详细介绍语言本身,而且介绍常用的数据结构和算法、面向https://www.xuetangx.com/courses/TsinghuaX/00740043X/2015_T1/about
15.程序设计基础(用C++语言编程)课后习题解答程序设计基础(用C++语言编程)课后习题解答.pdf 102页VIP内容提供方:微传网络 大小:9.16 MB 字数:约15.63万字 发布时间:2024-03-28发布于河北 浏览人气:117 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)程序设计基础(用C++语言编程)课后习题解答.pdf 关闭预览 想预览https://max.book118.com/html/2024/0324/8043031107006050.shtm
16.厦门趣乐码信息学奥赛Python青少儿编程课程C++ 校区1¥咨询 458人已关注 少儿编程Scratch+Arduino 校区1¥咨询 405人已关注 少儿编程_趣味C++ 校区1¥咨询 463人已关注 少儿编程Scratch 校区1¥咨询 查看更多>> 厦门趣乐码优势更多> 厦门趣乐码是一家专为6~18岁青少儿提供编程培训服务的机构,线上、线下教学相结合,师资力量强大,凭借https://www.baijiao.org/school/xiamenqulema/
17.十大编程软件排行榜编程开发工具大全c语言编程软件有哪些→世界上主流的编程语言有C、Java、Python、C++、C#、Visual Basic、PHP等,针对这些编程语言,又有相对应的Visual C++、Visual Studio、Eclipse、Dev-C++、Notepad++、MyEclipse、JDK、Code::Blocks、Gcc、Sublime Text、IntelliJ IDEA、Ultraedit、C-Free等编程软件,被广泛运用,下面跟随maigoo网编辑一起了解下这些编程工具!https://www.maigoo.com/top/419670.html
18.从零开始的C++网络编程c++网络编程框架? 搭建C/S:用C++搭建一个最简单的,基于socket网络编程的客户端和服务器 ? socket库函数浅析:基于上一节搭建的客户端和服务器的代码介绍相关的库函数 ? 搭建HTTP服务器:基于上一节的介绍和HTTP工作过程将最开始搭建的服务器改为HTTP服务器 ?压力测试入门:优化一下服务器,并使用ab工具对优化前后的服务器https://blog.csdn.net/lingshengxueyuan/article/details/105157295
19.盘点济南地区少儿编程c++课程机构培训十大排名一览2、济南地区乐博乐博:专注于中国3-18岁青少儿编程教育,研发出针对中国儿童的编程教育体系,涵盖人工智能编程、智能机器人编程、信息学奥赛编程等,其在140多所中小学院校开展了编程课程,拥有超230家直营校区+线上教育平台,遍布全国50多个城市。 3、济南地区小码王:专注于中国3-18岁青少儿编程教育,研发出针对中国儿童https://www.bosida.net/news/1398762.html
20.编程利器实用的C/C++语言在线编译器今天主要来安利一款支持C语言、 C++、 Java、Python、Go等多种语言的在线编译器:Lightly IDE(https://lightly.teamcode.com/c)。 以C语言在线编译器为例,大家只需要在浏览器打开就可以开始编程并一键运行: 选择编程语言和版本,让C语言在线编译器自动创建项目文件。 https://www.jianshu.com/p/c0216c71fb4f
21.C++C语言视频教程2017入门游戏编程项目软件开发资源数量:1203,其他_C,C++,【C++_C语言视频教程2017-cocos2dx游戏编程系列】,C丨C++各种开发环境搭建视频工具文档,01-C语言基础,02-C语言提高,03-linux服务器编程&Shell编程,04-linux&shell经典复习,06-第一套-VC++MFC开发,06-第二套-VC++MFC开发知识库视频教程,07-QT开发,0https://www.aigei.com/view/81102-36652610.html
22.C++教程编程入门教程class(类)是 C++ 面向对象设计的基础。使用 class 关键字声明一个类。 9. const const(常量的,constant)所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。在函数的声明与定义时都要加上const,放在函数参数列表的最后一个括号后。在 C++ 中,用 const https://www.nowcoder.com/tutorial/10003/4f26dfd7240a44f095f44ef9be963279
23.2020年张家港市线上校园引才招聘专场1、具备机械识图及机械工艺分析能力; 2、具备独立编程能力者优先考虑; 2 机器人焊接工程师 2 焊接/机械专业 大专以上 3000-5000元/月 1、负责确定产品焊接工艺、焊接工装的方案; 2、负责产品焊接工装夹具的设计工作; 编号030:江苏港通电缆有限公司 2020年“同心战疫情?相约张家港”线上校园引才招聘专场 高校毕http://job.kmust.edu.cn/detail/news?id=435762&type_id=5113
24.C++高级编程(第2版)(ScottJ.Kleper)高清中文pdf扫描版486Mc++是当今最流行的高级程序设计语言之一,常用于编写性能卓越的企业级面向对象程序,如游戏或大型商业软件。但一个无法规避的事实是:c++语法纷繁复杂,学习难度较大。如何才能化繁为简,全面系统地快速掌握c++知识呢? c++高级编程(第2版) 将为您提供完美答案。这本权威书籍在大量实例的引导下,解密c++中鲜为人知的特性,https://www.jb51.net/books/166909.html